标签: shapely

多边形交叉点错误| Python身材匀称

我一直在尝试调试此问题,但无法执行此操作.我试图找到两个Polygon对象的交集.它大部分时间都有效,但对于以下情况,它会引发以下异常:

P1 area: 13.125721955
P2 area: 1.0
Traceback (most recent call last):
File "geom2d.py", line 235, in <module>
print p1.intersection(p2)
File "/usr/local/lib/python2.7/dist-packages/shapely/geometry/base.py", line 334, in     intersection
return geom_factory(self.impl['intersection'](self, other))
  File "/usr/local/lib/python2.7/dist-packages/shapely/topology.py", line 47, in __call__
    "The operation '%s' produced a null geometry. Likely cause is invalidity of the geometry %s" % (self.fn.__name__, repr(this)))
shapely.geos.TopologicalError: The operation 'GEOSIntersection_r' produced a null     geometry. Likely cause is invalidity of the geometry <shapely.geometry.polygon.Polygon      object at 0x8e5ad6c>
Run Code Online (Sandbox Code Playgroud)

代码如下.

from shapely.geometry import Point,Polygon,MultiPolygon

poly1 …
Run Code Online (Sandbox Code Playgroud)

python intersection exception polygon shapely

6
推荐指数
2
解决办法
1万
查看次数

测试几何项是否在python列表中相交

我有一个数据列表如下:

from shapely.geometry import box

data = [box(1,2,3,4), box(5,6,7,8), box(1,2,3,4)]
codes = ['A','B','C']
Run Code Online (Sandbox Code Playgroud)

列表"数据"包含以下元素:

A = box(1,2,3,4)
B = box(5,6,7,8)
C = box(1,2,3,4)
Run Code Online (Sandbox Code Playgroud)

我必须检查元素是否与任何其他元素相交.如果相交,他们应该放入一个元组; 如果不相交,他们应该放入不同的元组.预期的结果是:

result = [(A,C), (B)]
Run Code Online (Sandbox Code Playgroud)

怎么做?

我试过它:

results = []
for p,c in zip(data,codes):
    for x in data:
        if p.intersects(x): ##.intersects return true if they overlap else false
            results.append(c)
print results
Run Code Online (Sandbox Code Playgroud)

python shapely

6
推荐指数
1
解决办法
939
查看次数

在matplotlib中绘制多边形的联合

我试图绘制几个多边形的联合matplotlib,具有一定的alpha级别.我目前的代码在交叉点处颜色较深.无论如何都要将交叉点与其他地方的颜色相同?

import matplotlib.pyplot as plt

fig, axs = plt.subplots()
axs.fill([0, 0, 1, 1], [0, 1, 1, 0], alpha=.25, fc='r', ec='none')
axs.fill([0.5, 0.5, 1.5, 1.5], [0.5, 1.5, 1.5, 0.5], alpha=.25, fc='r', ec='none')
Run Code Online (Sandbox Code Playgroud)

生成的情节

python plot matplotlib shapely

6
推荐指数
1
解决办法
5249
查看次数

沿着多线插入每个X距离的形状

如果我有一个形状多线的对象,其中包含许多线,每条线的总长度为50km(从原点开始追踪),我想每隔X米沿多线插值(比如说100米),每100米返回一个匀称的点对象,如何我可以做到这一点吗?

这是我到目前为止所做的,但它只返回一个不同的点(当我知道它应该返回数千,在ArcMap中测试):

points = []

for x in range(100,50000,100):
    x,y = multiline.interpolate(x).xy
    xy = (x[0],y[0])
    points.append(xy)

trim = list(set(points))
Run Code Online (Sandbox Code Playgroud)

以下是修剪包含的内容:

[(-90.5864707030599, 38.4688716729703)]
Run Code Online (Sandbox Code Playgroud)

如果我将多线分成单独的线,我可以获得更多的分(162),但仍然不是我应该生成的1000s:

lines_shape = []

# breaking out individual lines into shapely line strings
for line in multiline:
    lines_shapes.append(gm.asLineString(line))

points = []

# interpolating points along each line
for line in lines_shapes:
    for x in range(100,50000,100):
        points.append(line.interpolate(x))

point_list = []
for point in points:
    x,y = point.xy
    xy = (x[0],y[0])
    point_list.append(xy)

trim = list(set(point_list))
Run Code Online (Sandbox Code Playgroud)

和trim包含:

[(-90.4766827033434, 38.5972414054466), (-90.5461231698478, 38.5000688058116), …
Run Code Online (Sandbox Code Playgroud)

python shapely

6
推荐指数
2
解决办法
2489
查看次数

是否可以在AWS Lambda环境中正确指向Python Shapely库的LIBGEOS_C?

我正在尝试编写一个 AWS python Lambda 函数,该函数利用 Shapely 进行简单的“多边形中的点”操作。我启动了一个 AWS linux EC2 实例,安装了 Shapely 并有一个工作脚本。然后,我从 EC2 实例下载了 Linux 特定的 libgeos_c.so.1 二进制文件,并将其(通过无服务器框架)捆绑到与 lambda 函数相同的目录中。但是,一旦我部署,脚本将不会执行,因为它会抛出“无法找到库或加载其任何变体...”错误。我什至尝试通过 GEOS_LIBRARY_PATH 环境变量显式指向 libgeos_c.so.1 路径,但没有效果。这是不可能的部署吗?

这是一个代码片段,它设置环境变量,然后调用实际导入和利用 shapely 的辅助脚本。

import sys
import os
import subprocess

here = os.path.dirname(os.path.realpath(__file__))

# Import installed packages (in site-packages)
site_pkgs = os.path.join(here, "venv", "lib", "python2.7", "site-packages") 
sys.path.append(site_pkgs)
import json

def hello(event, context):

    command = "GEOS_LIBRARY_PATH={} python test_geo_worker.py".format(here + "/libgeos_c.so.1")
    foo = subprocess.check_output(command, shell=True)
    print foo
Run Code Online (Sandbox Code Playgroud)

有人在 lambda 中成功部署过 shapely 吗?我的后备计划是回到旧的 postgres/postgis 而不是 shapely,但我肯定想尝试在 dynamo/lambda 堆栈中构建它。

python amazon-web-services shapely aws-lambda serverless-framework

6
推荐指数
1
解决办法
1139
查看次数

如何在具有多边形的多边形Python中的多边形中打洞

在python中,我有一个普通的“外部”多边形和一个“内部”多边形列表。我想使用此列表在多边形中打孔。

from shapely.geometry import Polygon

# polygon with 1 hole in the middle
p = Polygon(((0,0),(10,0),(10,10),(0,10)), (((4,4),(4,6),(6,6),(6,4)), ))
print p.wkt
# POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0), (4 4, 4 6, 6 6, 6 4, 4 4))

# other constructor, does not work (no hole) :
outer = Polygon(((0,0),(10,0),(10,10),(0,10),(0,0)))
inners = (Polygon(((4,4),(4,6),(6,6),(6,4),(4,4))), )
p = Polygon(outer, inners)
print p.wkt
# POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))
Run Code Online (Sandbox Code Playgroud)

如何根据给定的外部和内部构造p?

python polygon shapely

6
推荐指数
1
解决办法
1612
查看次数

如何绘制带孔的形状多边形?

我想要一个函数plot(shapely_objects),其中shapely_objects包含多边形,点和多边形的列表.我有一些非常相似的东西,但它填补了多边形的漏洞.如何绘制带孔的形状多边形?

from shapely.geometry import Point, shape


def plot(shapely_objects, figure_path='fig.png'):
    from matplotlib import pyplot as plt
    import geopandas as gpd
    boundary = gpd.GeoSeries(shapely_objects)
    boundary.plot(color=['red', 'green'])
    plt.savefig(figure_path, dpi=300, bbox_inches="tight")


p = Point(12.12, 54.085)
name = ''
multi_poly = {'coordinates': (((12.11, 54.08), (12.11, 54.09),
                               (12.13, 54.09), (12.13, 54.08)),
                              ((12.11, 54.08), (12.11, 54.09),
                               (12.13, 54.09), (12.13, 54.08))),
              'type': 'Polygon'}
multi_poly = shape(multi_poly)
plot([p, multi_poly, p])

print('multi_poly.intersects(p) == {}'.format(multi_poly.intersects(p)))
print('multi_poly.touches(p) == {}'.format(multi_poly.touches(p)))
print('multi_poly.contains(p) == {}'.format(multi_poly.contains(p)))
print('p.within(multi_poly) == {}'.format(p.within(multi_poly)))

p, multi_poly …
Run Code Online (Sandbox Code Playgroud)

python visualization matplotlib shapely

6
推荐指数
0
解决办法
1010
查看次数

形状优美的 LineString 相交是否有问题?

在与 Shapely 合作时,我遇到了一个奇怪的问题。有两个点 p1 和 p2,其中第一个点属于多边形,第二个点不属于多边形。当我尝试查找包含这两个点作为端点的 LineString 与多边形边界线之间的交点时,我收到消息称未找到交点。我想知道,怎么可能?

from shapely.geometry import Polygon as SPolygon, Point, LineString

p1 = Point(5.414213562373095, 2.585786437626905)
p2 = Point(15.17279752753168, -7.172797527531679)

l = LineString([p1, p2])

l1 = LineString([(2, 2), (2, 6)])
l2 = LineString([(2, 6), (6, 6)])
l3 = LineString([(6, 6), (6, 2)])
l4 = LineString([(6, 2), (2, 2)])


sp = SPolygon([(2, 2), (2, 6), (6, 6), (6, 2)])

print "Polygon contains p1:", sp.contains(p1)
print "Polygon contains p2:", sp.contains(p2)

for i, line in enumerate((l1, l2, l3, l4)): …
Run Code Online (Sandbox Code Playgroud)

python intersection polygon shapely

6
推荐指数
1
解决办法
1万
查看次数

OSError:找不到geos_c.dll或加载其任何变体

我正在尝试使用shapley,并将其用于我需要的东西,我必须“从匀称导入几何体”导入,但出现错误OSError:找不到lib geos_c.dll

我尝试通过“ pip install geos”安装“ geos”,但没有做任何事情:要求已经满足

点位置:C:\ Users \ skoft \ AppData \ Local \ Programs \ Python \ Python37-32 \ Scripts \ pip.exe

import shapely

from shapely import geometry

OSError: Could not find lib geos_c.dll or load any of its variants ['C:\\Users\\skoft\\AppData\\Local\\Programs\\Python\\Python37-32\\Library\\lib\\geos_c.dll'].
Run Code Online (Sandbox Code Playgroud)

python install pip shapely

6
推荐指数
1
解决办法
903
查看次数

Geopandas:如何将列几何形状转换为字符串?

我有一个 geopandas 数据框

    geometry                                           idx
0   POLYGON ((-74.25559 40.91553, -74.24559 40.915...   0
1   POLYGON ((-74.25559 40.90553, -74.24559 40.905...   1
2   POLYGON ((-74.25559 40.89553, -74.24559 40.895...   2
3   POLYGON ((-74.25559 40.88553, -74.24559 40.885...   3
4   POLYGON ((-74.25559 40.87553, -74.24559 40.875...   4
Run Code Online (Sandbox Code Playgroud)

在哪里

gridDF['geometry'][0]
 <shapely.geometry.polygon.Polygon at 0x7fa4cc6ccc50>
Run Code Online (Sandbox Code Playgroud)

我想将列中的条目转换geometry为字符串。

python pandas shapely geopandas

6
推荐指数
2
解决办法
1万
查看次数