Yanıtlar:
Python GDAL / OGR Cookbook için bazı örnek kodu vardır Tampon Geometri .
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())
ve İki Geometri arasındaki kesişimin hesaplanması
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()
Geometriler şekil dosyalarına ve diğer çeşitli formatlara okunabilir ve yazılabilir .
, Basitleştirmek için düzgün: Manuel Python PostGIS arasında işlem tüm geometrisini verir.
Shapely'nin ilk önceliği, Python programcılarının bir RDBMS dışında PostGIS tipi geometri işlemlerini yapabilmesi gerektiğidir ...
PolyGeo'nun ilk örneği
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), ....}
Polygon'un poligon örneği:
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
İkinci öneri, özelliklerin kalıcılığı, serileştirilmesi ve harita projeksiyonunun önemli fakat dik problemler olmasıdır. Yüz CBS formatında okuyucuya ve yazarlara ya da çok sayıda Devlet Uçağı projeksiyonuna ihtiyacınız olmayabilir ve Shapely size bunlarla yükümlü değildir.
Böylece şekil dosyalarını okumak veya yazmak ve osgeo.ogr, Fiona veya PyShp gibi projeksiyonları değiştirmek için diğer Python modülleriyle birleştirirsiniz .
Gis StackExchange'te arama yaparken birçok örnek bulabilirsiniz, ancak size düzgün ve Fiona kombinasyonunu ve düzgün işlevlerin kesişme () ve buffer () kullanımını göstermek için başka bir örnek verdim (Bu PyShp ile yapılabilirdi).
İki çoklu çizgi şekli dosyası verilir:
Düzgün kesişim (işlev kesişimi ())
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)
Sonucu yeni bir şekil dosyası olarak kaydedin
# 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}})
Sonuç:
Tek tek noktaları (işlev tamponu () düzgün şekilde) tamponlar
# 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}})
Sonuç
MultiPoint geometrisini arabelleğe alma
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}})
'Git' coğrafi işlem kütüphanem 'Uzaktan Algılama ve GIS Kütüphanesi'dir (RSGISLib). Kurulumu ve kullanımı kolaydır ve belgeler gerçekten iyidir. Vektör ve raster işleme için işlevselliğe sahiptir - çok nadiren bir GUI'ye gitmem gerekiyor. Burada bulunabilir: http://rsgislib.org .
Bu örnekte bir örnek:
rsgislib.vectorutils.buffervector(inputvector, outputvector, bufferDist, force)
Bir vektörü belirtilen mesafeye arabelleğe alma komutu.
Nerede:
Misal:
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)