QGIS 1.8 Lisboa를 사용하고 있습니다. 다각형 셰이프 파일에서 중심을 계산 한 후 일부가 다각형 외곽선 밖에있는 경우 해당 다각형에서 가져온 다각형으로 이동하고 싶습니다. 다각형 자체의 식별 코드로 사용할 좌표를 추출하는 데 사용해야하므로 기준은 동일해야합니다. 따라서 프로시 저는 동일한 다각형에 대해 실행될 때마다 동일한 지점 위치를 출력해야합니다 ( "랜덤 포인트"기능으로 지정된 것과 같은 임의의 위치가 아님).
QGIS 1.8 Lisboa를 사용하고 있습니다. 다각형 셰이프 파일에서 중심을 계산 한 후 일부가 다각형 외곽선 밖에있는 경우 해당 다각형에서 가져온 다각형으로 이동하고 싶습니다. 다각형 자체의 식별 코드로 사용할 좌표를 추출하는 데 사용해야하므로 기준은 동일해야합니다. 따라서 프로시 저는 동일한 다각형에 대해 실행될 때마다 동일한 지점 위치를 출력해야합니다 ( "랜덤 포인트"기능으로 지정된 것과 같은 임의의 위치가 아님).
답변:
Shapely python 라이브러리를 사용할 수 있습니다.이 라이브러리 representative_point()
는 다각형 내에 있을 수있는 기능 을 제공합니다 .
다음은 QGIS Python 콘솔에서 실행할 수있는 Python 스크립트입니다. 속성을 만들 다각형 레이어를 선택해야합니다. 이 함수는 업데이트하려는 속성의 이름을 사용합니다. 이 속성은 레이어에 이미 존재해야하며 문자열 유형이어야하며 충분히 길어야합니다 (30 자).
다음은 알고리즘에서 찾은 포인트의 예입니다.
import shapely.wkb
def setIDPoint(attributename):
layer = qgis.utils.iface.activeLayer()
provider = layer.dataProvider()
fields = provider.fields()
provider.select(provider.attributeIndexes() )
attributeID = provider.fieldNameIndex(attributename)
feature = QgsFeature()
layer.startEditing()
while provider.nextFeature(feature):
wkb = feature.geometry().asWkb()
polygon = shapely.wkb.loads(wkb)
reprPoint = ','.join([str(polygon.representative_point().x), str(polygon.representative_point().y)] )
feature.changeAttribute(attributeID, reprPoint)
layer.updateFeature(feature)
layer.commitChanges()
ftools 중심 도구는 중심이 오목한 경우 다각형 외부에 중심을 배치 할 수 있습니다.
ST_PointOnSurface
확실히 당신이 원하는 것을 할 것입니다. SPIT을 사용하여 shapefile을 PostGIS로 가져온 다음 PgQuery 플러그인을 사용하여 쿼리를 실행하여 설치 한 경우 QGIS 내부에서 명령을 사용할 수 있습니다.
또는 PostGIS 설치가 일회성 용도로 사용 되는 경우 QGIS 내에서 Spatialite 를 사용할 수 있습니다 . 그런 다음 QSpatiaLite 플러그인을 사용하여 데이터를 SpatiaLite로 가져 와서 쿼리를 실행할 수 있습니다 (SpatialLite honors ST_PointOnSurface
).
내가 당신을 올바르게 이해하면 Vector-> Research Tools_> Random Points를 사용하십시오. 이제 "Stratified Sampling Design (개별 다각형)"에서 입력 필드의 값을 사용하고 적절한 필드를 사용하여 점의 숫자 값을 제공합니다. 각 필드는 서로 다른 다각형에 대해 생성되어야합니다.
플러그인> 플러그인 관리 및 설치를 통해 설치할 수있는 realcentroids 플러그인 QGIS 2.2에서 나를 위해 중심점과 같은 점을 생성하여 오목한 경우 각 다각형 내부에서 강제로 점이 생성되었습니다 (점은 가장자리에 매우 가깝습니다). Kurt가 제안한 Random points 도구를 사용해 보았는데 다각형 당 1 점을 지정했지만 대신 2 점을 생성합니다. 추가 단점은 대부분의 경우 점이 임의의 중심을 나타내지 않는다는 것입니다.