นี่คือฟังก์ชั่น QGIS หลามเล็กน้อยที่ใช้สิ่งนี้ มันต้องการปลั๊กอิน rasterlang (พื้นที่เก็บข้อมูลจะต้องถูกเพิ่มลงใน QGIS ด้วยตนเอง)
โดยคาดว่าจะมีสามพารามิเตอร์ที่จำเป็น: เลเยอร์จุด, เลเยอร์แรสเตอร์ (เพื่อกำหนดขนาดและความละเอียดของเอาต์พุต) และชื่อไฟล์สำหรับเลเยอร์เอาท์พุท นอกจากนี้คุณยังสามารถระบุอาร์กิวเมนต์ที่เป็นทางเลือกเพื่อกำหนดเลขชี้กำลังของฟังก์ชันการลดระยะทาง
น้ำหนักของคะแนนต้องอยู่ในคอลัมน์แอตทริบิวต์แรกของเลเยอร์คะแนน
แรสเตอร์ที่ได้จะถูกเพิ่มไปยัง Canvas โดยอัตโนมัติ
นี่คือตัวอย่างของวิธีการเรียกใช้สคริปต์ คะแนนมีน้ำหนักระหว่าง 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
? นั่นเป็นการเสียเวลาในการคำนวณ การคำนวณที่สูญเปล่าอีกชุดหนึ่งเกี่ยวข้องกับการทำให้กริด "แรงโน้มถ่วง" เป็นปกติทั้งหมดก่อนที่จะหาค่าสูงสุด: หาค่าสูงสุดและทำให้เป็นมาตรฐานด้วยผลรวม