버퍼와 같은 지오 프로세싱을 위해 Python 라이브러리 (ArcPy 제외)를 찾고 있습니까? [닫은]


16

ArcPy를 제외하고, shapefile로 버퍼 / 교차와 같은 지오 프로세싱을 수행 할 수있는 파이썬 라이브러리가 있습니까?

답변:


17

파이썬 GDAL / OGR 요리 책 에 몇 가지 예제 코드가 버퍼 기하학을 .

from osgeo import ogr

wkt = "POINT (1198054.34 648493.09)"
pt = ogr.CreateGeometryFromWkt(wkt)
bufferDistance = 500
poly = pt.Buffer(bufferDistance)
print "%s buffered by %d is %s" % (pt.ExportToWkt(), bufferDistance, poly.ExportToWkt())

두 기하학 사이의 교차계산

from osgeo import ogr

wkt1 = "POLYGON ((1208064.271243039 624154.6783778917, 1208064.271243039 601260.9785661874, 1231345.9998651114 601260.9785661874, 1231345.9998651114 624154.6783778917, 1208064.271243039 624154.6783778917))"
wkt2 = "POLYGON ((1199915.6662253144 633079.3410163528, 1199915.6662253144 614453.958118695, 1219317.1067437078 614453.958118695, 1219317.1067437078 633079.3410163528, 1199915.6662253144 633079.3410163528)))"

poly1 = ogr.CreateGeometryFromWkt(wkt1)
poly2 = ogr.CreateGeometryFromWkt(wkt2)

intersection = poly1.Intersection(poly2)

print intersection.ExportToWkt()

지오메트리는 쉐이프 파일 및 기타 다양한 형식 으로 읽고 쓸 수 있습니다 .


14

간단히 말해 Shapely : manual 은 Python에서 PostGIS의 모든 지오메트리 처리를 허용합니다.

Shapely의 첫 번째 전제는 Python 프로그래머가 RDBMS 외부에서 PostGIS 유형 지오메트리 작업을 수행 할 수 있어야한다는 것입니다.

PolyGeo의 첫 번째 예

from shapely.geometry import Point, LineString, Polygon, mapping
from shapely.wkt import loads  
pt = Point(1198054.34,648493.09)
# or
pt = loads("POINT (1198054.34 648493.09)")
bufferDistance = 500
poly = pt.buffer(bufferDistance)
print poly.wkt
'POLYGON ((1198554.3400000001000000 648493.0899999999700000, 1198551.9323633362000000 
# GeoJSON
print mapping(poly)
{'type': 'Polygon', 'coordinates': (((1198554.34, 648493.09), (1198551.9323633362, 648444.0814298352), (1198544.7326402017, 648395.544838992), ....}

PolyGeo의 다각형 예 :

poly1 = Polygon([(1208064.271243039,624154.6783778917), (1208064.271243039,601260.9785661874), (1231345.9998651114,601260.9785661874),(1231345.9998651114,624154.6783778917),(1208064.271243039,624154.6783778917)])    
poly2 = loads("POLYGON ((1199915.6662253144 633079.3410163528, 1199915.6662253144 614453.958118695, 1219317.1067437078 614453.958118695, 1219317.1067437078 633079.3410163528, 1199915.6662253144 633079.3410163528)))"

intersection = poly1.intersection(poly2)
print intersection.wkt
print mapping(intersection) -> GeoJSON

두 번째 전제는 특징의 지속성, 직렬화 및 맵 투영이 중요하지만 직교 문제라는 점입니다. 수백 개의 GIS 형식 판독기 및 작가 나 다수의 State Plane 투영이 필요하지 않을 수도 있으며 Shapely는 이에 대한 부담을주지 않습니다.

따라서 다른 파이썬 모듈과 결합하여 모양 파일을 읽거나 쓰고 osgeo.ogr, Fiona 또는 PyShp 로 투영을 조작 할 수 있습니다.
Gis StackExchange에서 검색하면 많은 예제를 찾을 수 있지만 매끈한 기능과 Fiona의 조합 및 매끈한 함수 교차 () 및 버퍼 () 사용을 설명하는 또 다른 예제를 제공합니다 (PyShp를 사용하여 수행 할 수 있음).

두 개의 폴리 라인 쉐이프 파일이 주어졌습니다 :

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

교차점 (모양의 함수 교차점)을 계산합니다.

from shapely.geometry import Point, Polygon, MultiPolygon, MumtiPoint, MultiLineString,shape, mapping
import fiona
# read the shapefiles and transform to MultilineString shapely geometry (shape())
layer1 = MultiLineString([shape(line['geometry']) for line in fiona.open('polyline1.shp')])  
layer2 = MultiLineString([shape(line['geometry']) for line in fiona.open('polyline2.shp')])
points_intersect = layer1.intersection(layer2)

결과를 새로운 shapefile로 저장

# schema of the new shapefile
schema = {'geometry': 'MultiPoint','properties': {'test': 'int'}}
# write the new shapefile (function mapping() of shapely)
with fiona.open('intersect.shp','w','ESRI Shapefile', schema) as e:
  e.write({'geometry':mapping(points_intersect), 'properties':{'test':1}})

결과:

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

개별 포인트를 버퍼링 (함수의 함수 버퍼 ())

 # new schema
 schema = {'geometry': 'Polygon','properties': {'test': 'int'}}
 with fiona.open('buffer.shp','w','ESRI Shapefile', schema) as e:
     for point in points:
          e.write({'geometry':mapping(point.buffer(300)), 'properties':{'test':1}})

결과

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

MultiPoint 지오메트리 버퍼링

schema = {'geometry': 'MultiPolygon','properties': {'test': 'int'}}
points.buffer(300)
with fiona.open('buffer2.shp','w','ESRI Shapefile', schema) as e:
     e.write({'geometry':mapping(points.buffer(300)), 'properties':{'test':1}})

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


9

매끈한는 파이썬 액세스를 제공 GEOS 등 / 버퍼 / 교차 할 수 있습니다. GEOS는 대부분의 OSGeo 프로그램이 이러한 작업을 수행하는 데 사용하는 라이브러리입니다.


9

다음은 파이썬 지오 프로세싱 소프트웨어 목록입니다.

  • 매끈한, 파이썬
  • OGR, 파이썬
  • QGIS, pyqgis, python
  • SagaGIS, Python
  • 잔디, 파이썬
  • 공간적, pyspatialite, python
  • PostreSQL / PostGIS, Psycopg, 파이썬
  • R 프로젝트, rpy2, 파이썬
  • 화이트 박스 GAT, Python -GeoScript, jython

1

내 'go to'지리 처리 라이브러리는 'Remote Sensing and GIS Library'(RSGISLib)입니다. 설치 및 사용이 쉽고 설명서가 정말 좋습니다. 그것은 벡터와 래스터 처리를위한 기능을 가지고 있습니다. 나는 거의 GUI에 가야 할 필요가 없습니다. http://rsgislib.org 에서 찾을 수 있습니다 .

이 인스턴스의 예는 다음과 같습니다.

rsgislib.vectorutils.buffervector(inputvector, outputvector, bufferDist, force)

지정된 거리만큼 벡터를 버퍼링하는 명령입니다.

어디:

  • inputvector는 입력 벡터의 이름을 포함하는 문자열입니다
  • outputvector는 출력 벡터의 이름을 포함하는 문자열입니다
  • bufferDist는 버퍼의 거리를지도 단위로 지정하는 부동 소수점입니다.
  • force는 부울이며 출력 벡터가 존재하는 경우 강제로 제거할지 여부를 지정합니다.

예:

from rsgislib import vectorutils
inputVector = './Vectors/injune_p142_stem_locations.shp'
outputVector = './TestOutputs/injune_p142_stem_locations_1mbuffer.shp'
bufferDist = 1
vectorutils.buffervector(inputVector, outputVector, bufferDist, True)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.