如何使用QGIS里面的python编程求最优路线?

如何使用QGIS里面的python编程求最优路线?,第1张

题主:

你的问题描述不是很详尽。

比如,你所说的最短路径,是直线还是沿道陵升备路的最短路径。如果是后者这个稍微麻烦些,并需要补充路网数据。如是直线距离最短,那么,你所需求的是以最短路径走访完所有农户(以居委会为起点),还是每户至居委会的距离最短(两点间直线距离)。还有就是GIS文件的属性表和你的EXCEL表格的关系...

所以,如你题中所说,建议你现在做的有以下几件事:

①明确要目标到底是什么,就如上面所说的一样;

②对于每一户(包括居委会),你还需获取其坐标(X/Y),这个在GIS软件中易获取;

③将excel数据连接至属性表中。

最后,你这个项目要解决的问题有Dijkstra、Floyd、A*等算法可用。但是具体笑首用哪一种还需尺毁根据问题进行优选...

希望对你有所帮助!!!

二叉树算法,败数洞察枯可能按照你的需求不是很多:

下面是我用的一个,不过你可以借鉴一下的:

# -*- coding: cp936 -*-

import os

class Node(object):

"""docstring for Node"""

def __init__(self, v = None, left = None, right=None, parent=None):

self.value = v

self.left = left

self.right = right

self.parent = parent

class BTree(object):

"""docstring for BtTee """

def __init__(self):

self.root = None

self.size = 0

def insert(self, node):

n = self.root

if n == None:

self.root = node

return

while True:

if node.value <= n.value:

if n.left == None:

node.parent = n

n.left = node

 毕圆 break

else:

n = n.left

if node.value >n.value:

if n.right == None:

n.parent = n

n.right = node

break

else:

n = n.right

def find(self, v):

n = self.root # http://yige.org

while True:

if n == None:

return None

if v == n.value:

return n

if v <n.value:

n = n.left

continue

if v >n.value:

n = n.right

def find_successor(node):

'''查找后继结点'''

assert node != None and node.right != None

n = node.right

while n.left != None:

n = n.left

return n

def delete(self, v):

n = self.find(v)

print "delete:",n.value

del_parent = n.parent

if del_parent == None:

self.root = None

return

if n != None:

if n.left != None and n.right != None:

succ_node = find_successor(n)

parent = succ_node.parent

if succ_node == parent.left:

#if succ_node is left sub tree

parent.left = None

if succ_node == parent.right:

#if succ_node is right sub tree

parent.right = None

if del_parent.left == n:

del_parent.left = succ_node

if del_parent.right == n:

del_parent.right = succ_node

succ_node.parent = n.parent

succ_node.left = n.left

succ_node.right = n.right

del n

elif n.left != None or n.right != None:

if n.left != None:

node = n.left

else:

node = n.right

node.parent = n.parent

if del_parent.left == n:

del_parent.left = node

if del_parent.right == n:

del_parent.right = node

del n

else:

if del_parent.left == n:

del_parent.left = None

if del_parent.right == n:

del_parent.right = None

def tranverse(self):

def pnode(node):

if node == None:

return

if node.left != None:

pnode(node.left)

print node.value

if node.right != None:

pnode(node.right)

pnode(self.root)

def getopts():

import optparse, locale

parser = optparse.OptionParser()

parser.add_option("-i", "--input", dest="input", help=u"help name", metavar="INPUT")

(options, args) = parser.parse_args()

#print options.input

return (options.input)

if __name__ == '__main__':

al = [23, 45, 67, 12, 78,90, 11, 33, 55, 66, 89, 88 ,5,6,7,8,9,0,1,2,678]

bt = BTree()

for x in al :

bt.insert(Node(x))

bt.delete(12)

bt.tranverse()

n = bt.find(12)

if n != None:

print "find valud:",n.value


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12388564.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存