তুলনা করার জন্য, কিউজিআইএস, আর্কজিআইএস, পোস্টজিআইএস ইত্যাদি ব্যতীত পাইথন- এ আরও কার্যকর স্পিটিয়াল যোগদান দেখুন । সমাধান উপস্থাপন ব্যবহার পাইথন মডিউল Fiona, , সুষম এবং rtree (স্থানিক ইনডেক্স)।
পাইকিজিআইএস এবং একই উদাহরণ সহ দুটি স্তর point
এবং polygon
:
1) একটি স্থানিক সূচক ছাড়া:
polygons = [feature for feature in polygon.getFeatures()]
points = [feature for feature in point.getFeatures()]
for pt in points:
point = pt.geometry()
for pl in polygons:
poly = pl.geometry()
if poly.contains(point):
print point.asPoint(), poly.asPolygon()
(184127,122472) [[(183372,123361), (184078,123130), (184516,122631), (184516,122265), (183676,122144), (183067,122570), (183128,123105), (183372,123361)]]
(183457,122850) [[(183372,123361), (184078,123130), (184516,122631), (184516,122265), (183676,122144), (183067,122570), (183128,123105), (183372,123361)]]
(184723,124043) [[(184200,124737), (185368,124372), (185466,124055), (185515,123714), (184955,123580), (184675,123471), (184139,123787), (184200,124737)]]
(182179,124067) [[(182520,125175), (183348,124286), (182605,123714), (182252,123544), (181753,123799), (181740,124627), (182520,125175)]]
2) আর-ট্রি পাইকজিআইজিএস স্থানিক সূচক সহ:
# build the spatial index with all the polygons and not only a bounding box
index = QgsSpatialIndex()
for poly in polygons:
index.insertFeature(poly)
# intersections with the index
# indices of the index for the intersections
for pt in points:
point = pt.geometry()
for id in index.intersects(point.boundingBox()):
print id
0
0
1
2
এই সূচকগুলির অর্থ কী?
for i, pt in enumerate(points):
point = pt.geometry()
for id in index.intersects(point.boundingBox()):
print "Point ", i, points[i].geometry().asPoint(), "is in Polygon ", id, polygons[id].geometry().asPolygon()
Point 1 (184127,122472) is in Polygon 0 [[(182520,125175), (183348,124286), (182605,123714), (182252,123544), (181753,123799), (181740,124627), (182520,125175)]]
Point 2 (183457,122850) is in Polygon 0 [[(182520,125175), (183348,124286), (182605,123714), (182252,123544), (181753,123799), (181740,124627), (182520,125175)]]
Point 4 (184723,124043) is in Polygon 1 [[(182520,125175), (183348,124286), (182605,123714), (182252,123544), (181753,123799), (181740,124627), (182520,125175)]]
Point 6 (182179,124067) is in Polygon 2 [[(182520,125175), (183348,124286), (182605,123714), (182252,123544), (181753,123799), (181740,124627), (182520,125175)]]
পাইথনে কিউজিআইএস, আর্কজিআইএস, পোস্টজিআইএস ইত্যাদি ছাড়াই অধিক দক্ষ স্পিটিয়াল যোগ দেওয়ার মতো একই সিদ্ধান্তে :
- এবং সূচক ব্যতীত, আপনাকে অবশ্যই সমস্ত জ্যামিতির (বহুভুজ এবং পয়েন্ট) মাধ্যমে পুনরাবৃত্তি করতে হবে।
- একটি বাউন্ডিং স্পেসিয়াল ইনডেক্স (QgsSpatialIndex ()) দিয়ে, আপনি কেবলমাত্র এমন জ্যামিতির মাধ্যমে পুনরাবৃত্তি করেন যা আপনার বর্তমান জ্যামিতির সাথে ছেদ করার সুযোগ পেয়েছে ('ফিল্টার' যা যথেষ্ট পরিমাণে গণনা এবং সময় সাশ্রয় করতে পারে ...)।
- আপনি আপনার কোডটি গতি বাড়ানোর জন্য কিউজিআইএস স্পেসিয়াল ইনডেক্স ব্যবহার করে পাইকিউজিআইএস এর সাথে পাইথন মডিউলগুলি ( আর্ট্রি , পাইরিট্রি বা কোয়াড্রি ) ব্যবহার করতে পারেন (কিউএসস্পেসিয়াল ইন্ডেক্স () এবং rtree সহ )
- তবে একটি স্পেসিয়াল ইনডেক্স কোনও ম্যাজিক ভান্ড নয়। যখন ডেটাসেটের খুব বড় অংশটি পুনরুদ্ধার করতে হয়, তখন একটি স্থানিক সূচক কোনও গতির সুবিধা দিতে পারে না।
জিআইএস সে-র অন্যান্য উদাহরণ: কিউজিআইএস-এর একটি বিন্দুর নিকটতম লাইনটি কীভাবে খুঁজে পাবেন? [নকল]