2010-01-12 4 views
0

폴리곤 컬렉션과 다른 벡터 객체가 포함 된 파일 (* .shp는 GIS에 사용됨)이 있습니다 (폴리곤이 가장 중요합니다). 인쇄 할 수없는 객체를 제거해야합니다.벡터 객체가 지정된 dpi와 인쇄 크기로 인쇄 할 때 보이는지 확인

어떤 기준을 선택했는지 알 수 없습니다. 경계 길이가 작은 오브젝트를 제거하는 것이 작은 영역의 오브젝트를 제거하는 것이 좋을 것이라고 생각합니다. 따라서 긴 오브젝트가 줄 서서 줄어 듭니다. 하지만 거기에는 특별한 알고리즘이있을 수 있습니까?

다른 말로하면 주어진 확대/축소 수준에서 볼 수있는 객체 만 찾고 싶습니다.

답변

1

매우 간단합니다. 당신이 언급 해달라고 같은 언어는 다음 의사

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

을 고려 포함() 함수는 y 값은 위에서 아래로 증가한다고 가정처럼 보일 것입니다 : 제거하기 위해

bool Rect::Contains(OtherRect) 

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

    return false; 
} 
+0

과 같은 전용 매핑 라이브러리를 사용하여 해결할 수 있습니다. 그러나이 코드가 올바르게 이해되면 oneShape가 특정 영역에 속하는지 만 확인합니다. "다른 말로하면"혼란 스럽습니다. 물론 당신의 코드는 그 박쥐를 달성하는 것이 중요합니다. 나는 또한 작은 물체로 옮기고 싶습니다. 예를 들어 낮은 확대/축소 수준에서는 대륙 만 표시하고 더 큰 수준에서는 인용을 표시하려고합니다. 그러나 주어진 확대/축소 수준에서 볼 수있는 내용을 임의로 결정하고 싶지는 않습니다. 어떤 사람은 고해상도로 인쇄 할 것이므로 낮은 줌 레벨로 국가를 인쇄하고 (아마도 돋보기를 사용하는 것) 허용해야합니다. –

1

폴리곤 만들려는 이미지의 dpi에 따라 달라집니다. 한 픽셀이 한 픽셀 만 채울 경우 제거하거나 점 표현으로 대체해야합니다. 물론 이것은 줄의 너비에 영향을받습니다. 이러한 종류의 문제는 mapnik.org

+0

이것은 내가 필요한 것입니다. 하지만 저는 Geotools (www.geotools.org)를 선호합니다. 왜냐하면 저는 Java와 C++가 더 많기 때문입니다. 불행히도 저는 Geotools에서 어떻게하는지 모르겠습니다. –

관련 문제