यहाँ एक छोटा क्यूजीआईएस पायथन फ़ंक्शन है जो इसे लागू करता है। इसके लिए रैस्टरलैंग प्लगइन (रिपॉजिटरी को मैन्युअल रूप से QGIS में जोड़ना पड़ता है) की आवश्यकता होती है।
यह तीन अनिवार्य मापदंडों की अपेक्षा करता है: अंक परत, एक रेखापुंज परत (आउटपुट के आकार और संकल्प को निर्धारित करने के लिए), और आउटपुट परत के लिए एक फ़ाइल नाम। आप दूरी के क्षय समारोह के प्रतिपादक को निर्धारित करने के लिए एक वैकल्पिक तर्क भी प्रदान कर सकते हैं।
अंक के लिए भार अंक परत के पहले विशेषता कॉलम में होना चाहिए।
परिणामी रेखापुंज स्वचालित रूप से कैनवास में जोड़ा जाता है।
यहाँ स्क्रिप्ट चलाने का एक उदाहरण दिया गया है। अंक में 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
? यह कम्प्यूटेशनल समय की बर्बादी है। गणनाओं के एक और बर्बाद सेट में अधिकतम खोजने से पहले सभी "गुरुत्व" ग्रिड को सामान्य करना शामिल है: इसके बजाय, उनके अधिकतम को ढूंढें और उस योग को सामान्य करें।