arcpy를 사용하지 않고 shapefile을 지오 프로세싱하기위한 Python 스크립트 예제


33

arcpy를 기반으로하지 않는 Python 스크립트를 사용하여 속성으로 모양 파일을 쿼리하고 선택에서 새 레이어를 만들고 다각형 영역을 계산하고 다각형을 점으로 변환하는 등의 작업을 수행하고 싶습니다.

다른 파이썬 모듈이나 라이브러리를 사용하는 코드 예제가 있습니까? 나는 arcpy를 사용하여 이것을 쉽게 할 수 있지만 다른 옵션을 탐색하고 싶었다.


geopandas는 벡터 파일의 친구입니다. 래스터 용 래스터 리오.
RutgerH

답변:


54

사람들이 갑자기 파이썬의 힘을 발견 한 것처럼 (이상하게는 하나의 파이썬 모듈 인 ArcPy없이) 파이썬에서 shapefile 시각화 질문을 참조하십시오 .

  • 파이썬에서 지리 공간 처리는 Arcpy (또는 arcgisscripting)보다 훨씬 오래된 역사 를 지니고 있습니다. Paul이 말했듯이 ArcPy의 기능을 "모방"하지 않습니다.
  • Python 모듈에 대한 참조는 Python Package Index ( Pypi )이며 전용 섹션이 있습니다 : 주제 :: 과학 / 엔지니어링 :: GIS
  • 이 모듈로 무엇이든 할 수 있으며 ArcPy보다 쉽고 빠릅니다. 순수한 파이썬이기 때문에 커서가 없습니다.
  • 지형 공간 형상 처리를위한 이러한 모듈 중 하나는 Shapely 입니다.-> 다각형 영역을 계산하고 다각형을 점으로 변환합니다.
  • 벡터 레이어를 처리하려면 osgeo / ogr , Fiona 또는 Pyshp (및 기타는 덜 사용됨)가 있습니다-> 속성으로 모양 파일 쿼리, 선택에서 새 레이어 생성, 다각형 영역 계산, 다각형을 점으로 변환
  • 래스터 처리의 경우 표준은 osgeo / gdal입니다.
  • 공간 분석을 위해 Pysal이 있습니다.
  • 3D의 경우 numpy 또는 scipy 와 같은 다른 과학 모듈 (3D 알고리즘, 그리드 및 통계, 지리 통계, 2D 또는 3D)을 사용할 수 있습니다
  • 그리고 mapnik , matplotlib / basemap , Geodjango 및 ...에 대해서는 이야기하지 않습니다 .

모든 (Pysal과 매끈한 ...)을 결합하여 다른 Scientific 모듈과 혼합 할 수 있습니다.

따라서 Python Script 예제의 경우 gis.stackexchange 또는 인터넷 (영어뿐만 아니라 많은 예제) 에서 Pyshp Fiona, ogr, gdal 또는 shapely를 검색하십시오 (영어뿐만 아니라 많은 예제).
프랑스어로 된 하나 (스크립트와 그림은 보편적입니다!)
- 파이썬 : GIS 소프트웨어없이 벡터와 지질 학적 관점에서 래스터 레이어를 사용하여
영어로 기타 :
- 파이썬, 매끈한, 피오나와 GIS
와 스페인어
- 정점의 좌표를 사용하여 불규칙한 다각형의 영역의 결정
gis.stackexchange의를
- 고도 프로필 10km는 라인의 각면
- 업데이트 Pyshp를 사용하여 속성
- 어떻게 래스터에서의 3D Shape 파일을 만드는 방법?
- 두 점 사이의 고도 차이를 얻는 Python 스크립트
-등

Aaron이 제시 한 스크립트는 Python 사전 만 사용하는 Fiona로 더 간단하게 작성할 수 있습니다.

import fiona
with fiona.open('sites.shp', 'r') as input:
    with open('hw1a.txt', 'w') as output:
       for pt in input:
           id = pt['properties']['id']
           cover = pt['properties']['cover']
           x = str(point['geometry']['coordinates'][0])
           y = str(point['geometry']['coordinates'][21])
           output.write(id + ' ' + x + ' ' + y+ ' ' + cover + '\n')

그리고 매끈하게 사용하는 경우 :

from shapely.geometry import shape
with fiona.open('sites.shp', 'r') as input:
    with open('hw1a.txt', 'w') as output:
       for pt in input:
           id = pt['properties']['id']
           cover = pt['properties']['cover']
           x = str(shape(pt['geometry']).x)
           y = str(shape(pt['geometry']).y)
           output.write(id + ' ' + x + ' ' + y+ ' ' + cover + '\n')

또한 두 권의 책이 있습니다 :

Eric Westra의 Python 지리 공간 개발 .

여기에 이미지 설명을 입력하십시오

Joel Lawhead의 Python 으로 지리 공간 분석 학습

여기에 이미지 설명을 입력하십시오

Python은 또한 QGIS (Quantum GIS), GRASS GIS, gvSIG 또는 OpenJump와 같은 다른 GIS 응용 프로그램 또는 Paraview (및 Blender 와 같은 !) 와 같은 3D 모델러에서 스크립팅 언어로 사용됩니다 . 또한 이러한 모든 응용 프로그램에서 대부분의 지리 공간 모듈을 사용할 수 있습니다 ( Blendar를 사용하여 QGIS 데이터 시각화 참조 )


이 파이썬 물건은 무엇입니까;)
Nathan W

Fiona가 Windows에서 DLL 오류를 발생시키는 것 같습니다.
multigoodverse

Fiona는 어떻게 설치 했습니까? 나에게 문제가 없다
gene

19

오픈 소스 GIS사용하여 Python으로 USU 사이트 지오 프로세싱 을 시작 하는 것이 좋습니다 . 그들은 주로 연습을 통해 GDAL / OGR 라이브러리를 사용합니다. GDAL / OGR을 설치하는 것은 다소 어려운 일일 수 있으므로이 블로그 항목이 도움이 될 수 있습니다 . Windows에 Python 용 GDAL (및 OGR) 설치 . 또한 GIS.SE 에서 Arcpy 사용 에 대한 대안을 확인하십시오.

USU 사이트에서 제공되는 다음 오픈 소스 지오 프로세싱 스크립트 예제는 속성 데이터를 추출하여 텍스트 파일에 쓰는 데 사용됩니다.

# import modules
import ogr, os, sys

# set the working directory
os.chdir('f:/data/classes/python/data')

# open the output text file for writing
file = open('hw1a.txt', 'w')

# get the shapefile driver
driver = ogr.GetDriverByName('ESRI Shapefile')

# open the data source
datasource = driver.Open('sites.shp', 0)
if datasource is None:
  print 'Could not open file'
  sys.exit(1)

# get the data layer
layer = datasource.GetLayer()

# loop through the features in the layer
feature = layer.GetNextFeature()
while feature:

  # get the attributes
  id = feature.GetFieldAsString('id')
  cover = feature.GetFieldAsString('cover')

  # get the x,y coordinates for the point
  geom = feature.GetGeometryRef()
  x = str(geom.GetX())
  y = str(geom.GetY())

  # write info out to the text file
  file.write(id + ' ' + x + ' ' + y + ' ' + cover + '\n')

  # destroy the feature and get a new one
  feature.Destroy()
  feature = layer.GetNextFeature()

# close the data source and text file
datasource.Destroy()
file.close()

4
.Destroy멋진 방법 이름입니다 : p
Jason

5

GDAL / OGR에 관심이있을 수 있습니다 .

GDAL은 래스터 처리에 사용되고 OGR은 벡터에 사용됩니다. 둘 다 오픈 소스 라이브러리입니다.

ArcPy에 대한 일부 종속성을 제거하려는 경우 정보를 배열로 읽고 순수 Python에서 자체 계산을 실행하여 일부 기능을 모방 할 수 있습니다.

여기에 표시된 것처럼 최근 다각형에서 점을 선택 하여이 작업을 수행 했습니다 . 폴리곤 정점의 좌표를 고려할 때 광선 캐스팅 알고리즘을 사용하여 점이 다각형 내에 있는지 확인합니다.


1
방문하여 페이지를 읽기 전에 솔루션의 본질을 파악하고 이해할 수있는 충분한 내용을 포함 시키십시오. 시간이 지나면 해당 페이지가 해당 주소에 없을 수도 있으므로이 답변은 그다지 유용하지 않습니다. :)
matt wilkie 2014 년

1

나는 이것을 개인적으로 사용한 적이 없지만 사무실의 다른 사람들은 매끈하게 사용하는 것을 좋아합니다 : https://pypi.python.org/pypi/Shapely


매끄럽게 사용하여 일부 샘플 코드를 게시 할 수 있습니까?
sherpas


5
링크 만 대답은 필연적으로 깨지기 때문에 장기적으로 도움이되지 않습니다. a) 새 집을 재발견 할 수있는 목적지에 대한 충분한 정보를 포함 시키십시오. b) 방문하여 페이지를 읽기 전에 솔루션의 본질을 파악하고 이해할 수 있습니다.
matt wilkie
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.