Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用shapely/python围绕一组(非相交)多边形绘制多边形_Python_Google Maps_Polygon_Kml_Shapely - Fatal编程技术网

使用shapely/python围绕一组(非相交)多边形绘制多边形

使用shapely/python围绕一组(非相交)多边形绘制多边形,python,google-maps,polygon,kml,shapely,Python,Google Maps,Polygon,Kml,Shapely,我正在使用谷歌地图创建一个显示财产边界的多边形集合——所有这些都在一个图层上。多边形可能包括一个特性不接触相邻特性的间隙。它们既不接触也不相交。 我想使用python和shapely创建一个多边形,封装层中的所有多边形。 我已从KML文件中提取了所有多边形坐标,并成功创建了一个形状优美的“封套”,如图所示(灰色阴影-属性多边形为彩色): 我不想在房子周围有个盒子。我实际上想要的是一个紧多边形围绕着这组多边形,类似这样的东西(蓝色线的位置): 我试过级联联、凸包联、一元联和线性化,但都没有用。

我正在使用谷歌地图创建一个显示财产边界的多边形集合——所有这些都在一个图层上。多边形可能包括一个特性不接触相邻特性的间隙。它们既不接触也不相交。 我想使用python和shapely创建一个多边形,封装层中的所有多边形。 我已从KML文件中提取了所有多边形坐标,并成功创建了一个形状优美的“封套”,如图所示(灰色阴影-属性多边形为彩色):

我不想在房子周围有个盒子。我实际上想要的是一个紧多边形围绕着这组多边形,类似这样的东西(蓝色线的位置):

我试过级联联、凸包联、一元联和线性化,但都没有用。有人能给我指出我需要使用的功能的正确方向吗

我的代码片段是:

coordinates = []

def getAllPolys(XmlFile, XmlNS, XPath):
    tree = etree.parse(XmlFile)
    root = tree.getroot()
    XmlNamespace = {"NS": XmlNS}
    xmlList = root.xpath(XPath, namespaces=XmlNamespace)
    if not xmlList:
        return(False)
    for p in xmlList:
        polyCoordList = p.text.replace(' ', '')
        for point_text in polyCoordList.split():
          floats = point_text.split(",")
          coordinates.append(geometry.Point(float(floats[0]), float(floats[1])))


def processEnvelope():
    e = geometry.MultiPoint([[p.x, p.y] for p in coordinates]).envelope
    L = list(e.exterior.coords)
    for x,y in L:
        print(str(x) + "," + str(y) + ",0")


XPath = "./NS:Document/NS:Folder[contains(., 'Property')]/NS:Placemark/NS:Polygon/NS:outerBoundaryIs/NS:LinearRing/NS:coordinates"
getAllPolys(XmlFile, XmlNS, XPath)
XPath = "./NS:Document/NS:Folder[contains(., 'Property')]/NS:Placemark/NS:MultiGeometry/NS:Polygon/NS:outerBoundaryIs/NS:LinearRing/NS:coordinates"
getAllPolys(XmlFile, XmlNS, XPath)
processEnvelope()

看来我需要一个字母形状。我的样本数据最初包含221个多边形,这似乎使我尝试的任何alphashape算法都不准确(无法在图形周围绘制准确的边框)。然后,我通过寻找多边形相交并通过一元并集将它们合并,将多边形的数量压缩到50个。这使得alphashape工作更可靠,但仍然不够完美。我认为图形的锯齿状边缘对于算法来说太复杂了。我用许多不同的alpha值尝试了alphashape函数。欢迎任何建议。