এখানে একটি অল্প কিউজিআইএস পাইথন ফাংশন যা এটি প্রয়োগ করে। এর জন্য রাস্টারল্যাং প্লাগইন প্রয়োজন (কিউজিআইএসে ম্যানুয়ালি ভান্ডার যুক্ত করতে হবে)।
এটি তিনটি বাধ্যতামূলক পরামিতি প্রত্যাশা করে: পয়েন্ট স্তর, একটি রাস্টার স্তর (আউটপুটটির আকার এবং রেজোলিউশন নির্ধারণ করতে), এবং আউটপুট স্তরের ফাইল নাম। দূরত্ব ক্ষয় ফাংশনের ব্যয় নির্ধারণের জন্য আপনি একটি alচ্ছিক যুক্তিও সরবরাহ করতে পারেন।
পয়েন্টগুলির জন্য ওজনগুলি পয়েন্ট স্তরটির প্রথম অ্যাট্রিবিউট কলামে থাকা দরকার।
ফলস্বরূপ রাস্টার স্বয়ংক্রিয়ভাবে ক্যানভাসে যুক্ত হয়।
স্ক্রিপ্টটি কীভাবে চালানো যায় তার একটি উদাহরণ এখানে। পয়েন্টগুলির ওজন 20 এবং 90 এর মধ্যে থাকে এবং গ্রিডটি 60 বাই 50 ম্যাপ ইউনিট আকারে থাকে।
points = qgis.utils.iface.mapCanvas().layer(0)
raster = qgis.utils.iface.mapCanvas().layer(1)
huff(points,raster,"output.tiff",2)
from rasterlang.layers import layerAsArray
from rasterlang.layers import writeGeoTiff
import numpy as np
def huff(points, raster, outputfile, decay=1):
if points.type() != QgsMapLayer.VectorLayer:
print "Error: First argument is not a vector layer (but it has to be)"
return
if raster.type() != QgsMapLayer.RasterLayer:
print "Error: Second argument is not a raster layer (but it has to be)"
return
b = layerAsArray(raster)
e = raster.extent()
provider = points.dataProvider()
extent = [e.xMinimum(),e.yMinimum(),e.xMaximum(),e.yMaximum()]
xcols = np.size(layerAsArray(raster),1)
ycols = np.size(layerAsArray(raster),0)
xvec = np.linspace(extent[0], extent[2], xcols, endpoint=False)
xvec = xvec + (xvec[1]-xvec[0])/2
yvec = np.linspace(extent[3], extent[1], ycols, endpoint=False)
yvec = yvec + (yvec[1]-yvec[0])/2
coordArray = np.meshgrid(xvec,yvec)
gravity = b
point = QgsFeature()
provider.select( provider.attributeIndexes() )
while provider.nextFeature(point):
coord = point.geometry().asPoint()
weight = point.attributeMap()[0].toFloat()[0]
curGravity = weight * ( (coordArray[0]-coord[0])**2 + (coordArray[1]-coord[1])**2)**(-decay/2)
gravity = np.dstack((gravity, curGravity))
gravitySum = np.sum(gravity,2)
huff = np.max(gravity,2)/gravitySum
np.shape(huff)
writeGeoTiff(huff,extent,outputfile)
rlayer = QgsRasterLayer(outputfile)
QgsMapLayerRegistry.instance().addMapLayer(rlayer)
curGravity
? এটি গণনার সময় নষ্ট। গণনার আরেকটি নষ্ট সেটটিতে সর্বাধিক সন্ধানের আগে সমস্ত "মাধ্যাকর্ষণ" গ্রিডকে সাধারণকরণের সাথে জড়িত: পরিবর্তে, তাদের সর্বাধিকটি সন্ধান করুন এবং সমষ্টি অনুসারে এটি স্বাভাবিক করুন।