Проверка, будет ли векторный объект видимым на отпечатке с заданным разрешением и размером печати - PullRequest
0 голосов
/ 13 января 2010

У меня есть файл (* .shp, используемый в ГИС), который содержит коллекцию полигонов и, возможно, других векторных объектов (но полигоны для меня наиболее важны) Мне нужно удалить непечатаемые объекты.

Я не знаю, какие критерии выбрали. Я думаю, что удаление объектов с небольшой длиной границы было бы лучше, чем удаление объектов с небольшой площадью (поэтому длинные объекты будут уменьшаться до линии). Но, может быть, для этого есть специальный алгоритм?

Другими словами, я хочу найти только те объекты, которые видны при заданном уровне масштабирования.

Ответы [ 2 ]

1 голос
/ 13 января 2010

Количество полигонов, которые нужно удалить, зависит от dpi изображения, которое вы хотите создать. Если линия будет заполнять только один пиксель, она должна быть удалена или заменена точечным представлением. Конечно, это будет зависеть от ширины линии. Многие из этих проблем могут быть решены с помощью специальной библиотеки отображения, такой как mapnik.org

1 голос
/ 13 января 2010

Это довольно просто. Поскольку вы не упомянули какой-либо язык, рассмотрите следующий псевдокод

drawRect = myDevice.GetDrawRect();
for(oneShape in allShapes)
{
    shapeRect = oneShape.GetRect()
    if(! drawRect.Contains(shapeRect))
         oneShape.MarkAsInvisible(); 
    else
         oneShape.Draw();
}

функция Contains () будет выглядеть примерно так, если предположить, что значения y увеличиваются снизу вверх:

bool Rect::Contains(OtherRect)

{
    if(left   <=  OtherRect.right  &&
       right  >=  OtherRect.left   &&
       top    >=  OtherRect.bottom &&
       bottom <=  OtherRect.top)
       return true

    return false;
}
...