আমাকে সাম্প্রতিক প্রশিক্ষণ কোর্সে জিজ্ঞাসা করা হয়েছিল যে কিউজিআইএস স্বয়ংক্রিয়ভাবে অ্যাটলাস জেনারেটর ব্যবহার করে তৈরি করা মানচিত্রের বইয়ের জন্য পরবর্তী / পূর্ববর্তী এবং উপরে / নীচের পৃষ্ঠা নম্বরগুলি গণনা করতে পারে। আপনি যদি গ্রিডের প্রস্থ এবং উচ্চতা জানেন তবে আমি একটি নিয়মিত গ্রিডের জন্য মোটামুটি যুক্তিসঙ্গত লেবেল এক্সপ্রেশনটি কাজ করতে সক্ষম হয়েছি।
তবে আমরা তখন এমন বাস্তববাদী উদাহরণগুলি চিন্তা করতে শুরু করেছি যেখানে আমরা এমন পৃষ্ঠাগুলি আঁকতে চাই না যেখানে আমাদের আগ্রহের জেলাটি নেই, যেমন আমার হোম কাউন্টির এই একটি:
সুতরাং আজ বিকেলে আমার প্রতিটি গ্রিড সেলের জন্য আগ্রহী 4 প্রতিবেশী কাজ করার জন্য অজগর স্ক্রিপ্টে একটি নাটক ছিল এবং আমার গ্রিডে এই মানগুলি জুড়েছিল (এটি উজ্জ্বল গান্ধীর টিউটোরিয়ালের উপর ভিত্তি করে ):
for f in feature_dict.values():
print 'Working on %s' % f[_NAME_FIELD]
geom = f.geometry()
# Find all features that intersect the bounding box of the current feature.
# We use spatial index to find the features intersecting the bounding box
# of the current feature. This will narrow down the features that we need
# to check neighboring features.
intersecting_ids = index.intersects(geom.boundingBox())
# Initalize neighbors list and sum
neighbors = []
neighbors_sum = 0
for intersecting_id in intersecting_ids:
# Look up the feature from the dictionary
intersecting_f = feature_dict[intersecting_id]
int_geom = intersecting_f.geometry()
centroid = geom.centroid()
height = geom.boundingBox().height()
width = geom.boundingBox().width()
# For our purpose we consider a feature as 'neighbor' if it touches or
# intersects a feature. We use the 'disjoint' predicate to satisfy
# these conditions. So if a feature is not disjoint, it is a neighbor.
if (f != intersecting_f and
not int_geom.disjoint(geom)):
above_point = QgsGeometry.fromPoint(QgsPoint(centroid.asPoint().x(),
centroid.asPoint().y()+height))
below_point = QgsGeometry.fromPoint(QgsPoint(centroid.asPoint().x(),
centroid.asPoint().y()-height))
left_point = QgsGeometry.fromPoint(QgsPoint(centroid.asPoint().x()-width,
centroid.asPoint().y()))
right_point = QgsGeometry.fromPoint(QgsPoint(centroid.asPoint().x()+width,
centroid.asPoint().y()))
above = int_geom.contains(above_point)
below = int_geom.contains(below_point)
left = int_geom.contains(left_point)
right = int_geom.contains(right_point)
if above:
print "setting %d as above %d"%(intersecting_f['id'],f['id'])
f['above']=intersecting_f['id']
if below:
print "setting %d as below %d"%(intersecting_f['id'],f['id'])
f['below']=intersecting_f['id']
if left:
print "setting %d as left of %d"%(intersecting_f['id'],f['id'])
f['left']=intersecting_f['id']
if right:
print "setting %d as right of %d"%(intersecting_f['id'],f['id'])
f['right']=intersecting_f['id']
# Update the layer with new attribute values.
layer.updateFeature(f)
layer.commitChanges()
এটি ঠিক কাজ করে।
তবে পুরোপুরি সত্যি বলতে কী উত্তরে একটি পরীক্ষা পয়েন্ট তৈরি করা এবং তারপরে সমস্ত সম্ভাব্য প্রতিবেশীর পরীক্ষা করা ভুল বলে মনে হয়। যাইহোক আমার মস্তিষ্ক ভাঙার এক বিকেলের পরে আমি একটি নির্দিষ্ট গ্রিড কোষের উত্তরের প্রতিবেশী কী তা নির্ধারণ করার ভালতর উপায় সম্পর্কে ভাবতে পারি না?
আদর্শভাবে আমি প্রিন্ট রচয়িতা পাঠ্য বাক্সে রাখার জন্য যথেষ্ট সাধারণ কিছু চাই, তবে আমার সন্দেহ হয় যে এটি জিজ্ঞাসা করার জন্য খুব বেশি।