जवाबों:
अजगर 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()
जियोमेट्रिक्स को शेपफाइल्स और कई अन्य प्रारूपों के लिए पढ़ा और लिखा जा सकता है।
सरल बनाने के लिए, Shapely: मैनुअल पायथन में PostGIS के सभी ज्यामिति प्रसंस्करण की अनुमति देता है।
शेपली का पहला आधार यह है कि पायथन प्रोग्रामर 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 StackExchange में खोज करने पर, आपको कई उदाहरण मिल सकते हैं, लेकिन मैं आपको सुडौल और फियोना के संयोजन और सुडौल कार्यों के प्रतिच्छेदन () और बफर () का उपयोग करने के लिए एक और एक देता हूं (यह 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)
परिणाम को एक नई आकृति के रूप में सहेजें
# 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}})
परिणाम
मल्टीप्वाइंट ज्यामिति बफर
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}})
मेरा 'जियो-प्रोसेसिंग लाइब्रेरी' जाना 'रिमोट सेंसिंग एंड जीआईएस लाइब्रेरी' (RSGISLib) है। इसका स्थापित करना और उपयोग करना आसान है और प्रलेखन वास्तव में अच्छा है। यह वेक्टर और रेखापुंज प्रसंस्करण के लिए कार्यक्षमता है - मुझे शायद ही कभी एक गुई के पास जाना पड़ता है। यह यहाँ पाया जा सकता है: http://rsgislib.org ।
इस उदाहरण में एक उदाहरण है:
rsgislib.vectorutils.buffervector(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)