2008-09-12 3 views
3

임의의 값을 포함하는 폴리곤 집합을 가져 와서 각 픽셀에 해당 위치의 폴리곤 값이 포함 된 해당 비트 맵을 만드는 방법은 무엇입니까?폴리곤 집합을 비트 맵으로 변환하는 방법

질문을 컨텍스트에 넣으려면 내 폴리곤에는 다각형 내의 평방 킬로미터 당 평균 인원 수에 대한 정보가 들어 있습니다. 200 미터 빈의 픽셀 수를 나타내는 래스터/비트 맵을 만들어야합니다.

이전에는 폴리곤을 사용하여 비트 맵을 그리거나 값을 채운 다음 비트 맵을 조작 할 수있는 배열로 변환하여 마스크를 만드는 것과 비슷한 작업을 수행했습니다. 이렇게하는 것이 더 좋은 방법이라고 확신합니다!

요청한대로 질문을 좀 더 명확히하고 있습니다.

  1. 여러 다각형이 있으며, 각각의 다각형은
  2. 각 다각형 폴리곤은

감사

닉 겹치지 않는

  • 하나의 고유 한 값을가집니다 벡터의 집합입니다

  • +0

    이 질문의 답변 중 일부는 관심의 대상 일 수 있습니다. http://stackoverflow.com/questions/1341399 – ideasman42

    답변

    1

    @Nick R

    내가 원래는 ArcGIS 9.2을 사용했지만, 그 C# 및 64 비트와 잘 작동하지 않기 때문에 지금 GDAL를 사용하고 (http://www.gdal.org) .

    gdal_rasterize은 원하는 것을 정확하게 수행합니까?

    1

    ImageMagick은 svg에서 png로 변환 할 수 있습니다. 코드를 살펴 보거나 단순히 svg를 만들고 변환을 위해 IM을 사용합니까? Scruffy 않습니다.

    2

    어떤 GIS 소프트웨어를 사용하고 있습니까? ArcGIS는 ArcGIS 9.2 이상의 Polygon to Raster 도구를 제공하며 PolygonToRaster_conversion 기능으로 스크립팅 할 수 있습니다.

    PolygonToRaster_conversion (in_features, value_field, out_raster_dataset, cell_assignment, priority_field, cellsize) 
    
    +0

    원래 ArcGIS 9.2를 사용했지만 C# 및 64 비트와 잘 작동하지 않으므로 현재 GDAL (http://www.gdal.org)을 사용하고 있습니다. 좋은 대답. –

    2

    아마도 이것은 당신이 필요하지 않습니다,하지만 당신은 다각형을 그립니다 (또는 반대로 다각형으로 다각형 이미지의 픽셀을 읽기)하려면 다음 하나 개의 솔루션은 자신의 polygon fill tool을 출시하는 것입니다. 솔직히 말해서, 이것은 재미있는 톤이며, 배우기에는 정말 깔끔합니다.

    그러나 귀하의 질문에 분명하지 않습니다. 더 나은 설명을 줄 수 있습니까?

    • 임의의 폴리곤 세트가 실제 이미지인지 또는 벡터 (즉, 점 목록) 포인트입니까?
    • 각 다각형에는 하나의 값이 있습니까, 아니면 각 다각형에 그려야하는 값의 배열이 있습니까?
    • 따라서 각 다각형에는 기본적으로 다각형을 텍스처링하려는 채우기 값의 관련 배열이 있습니까?

    -Adam

    +0

    질문에 대한 설명을 추가했습니다. 답변을 더 쉽게 만들 수 있습니다. –

    2

    재미있는 프로젝트입니다.여기에 내가 다각형이 볼록 가정 할 것이다 무엇 :

    have a NY * 2 array of x positions: int x[NY][2] 
    foreach polygon 
        clear the array to -1 
        for each edge line 
        foreach horizontal raster line iy intersecting the line 
         generate ix, the x position where the raster intersects the line 
         if x[iy][0] == -1, set it to ix, else set x[iy][1] to ix 
        end foreach iy 
        end foreach edge 
        foreach iy 
        fill the pixels between x[iy][0] and x[iy][1] with the polygons label 
        end foreach iy 
    end foreach polygon 
    

    이것은 당신이 래스터 생각하는 정신 훈련을 필요로하기 때문에 같은 픽셀이 표시되어야하지 좌표하지만, 그것은 생각보다 조금 더 까다 롭습니다 그것들 사이에는 보이지 않는 선들이있다. 그렇지 않으면 경계 문제로 혼란스러워집니다. 이 지점에서 B 지점으로 가장자리로 구성되어 돌아 가기에,이 더 픽셀에 불을 안처럼 당신이 제로 영역의 다각형이있는 경우

    이의 좋은 테스트입니다. 또 다른 테스트는 높이가 2 단위 인 평행 사변형이 있고 상단 및 하단 가장자리가 2 단위 넓이라면 정확히 4 픽셀을 밝게해야합니다. 다각형이 볼록하지 않는 경우

    , 그것은 조금 다릅니다. 모서리가 래스터 선을 가로 지르면 모든 픽셀을 임의로 선택한 X 좌표 (예 : "화면"의 왼쪽 가장자리)로 토글합니다. 모든 가장자리를 완료하면 홀수 번만 내부 픽셀 만 토글됩니다.

    +0

    자기 교차점에 대한 지원과 함께,이 같은 것을 구현하고, 각 래스터 라인에 대한 모든 가장자리에 걸쳐 반복 피한다 - http://stackoverflow.com/a/31768384/432509 – ideasman42

    관련 문제