相关疑难解决方法(0)

使用Python Shapely查找多边形的最大内接矩形

我试图在六个多边形内找到数百万个点.这是我的代码:

def find_shape(longitude,latitude):
    if longitude != 0 and latitude != 0:
        point = shapely.geometry.Point(longitude,latitude)
    else:
        return "Unknown"
    for current_shape in all_shapes:
        if current_shape['bounding_box'].contains(point):
            if current_shape['shape'].contains(point):
                return current_shape['properties']['ShapeName']
                break
    return "Unknown"
Run Code Online (Sandbox Code Playgroud)

我已经阅读了其他一些问题,这些问题涉及改善多边形点查询的性能.他们建议Rtrees.然而,这似乎是当有很多的多边形这是非常有用的情况下(36 000个问题,10万另一个),这是不可取的遍历所有.

正如您所见,我已经设置了一个边界框.这是我的形状设置代码:

with fiona.open(SHAPEFILE) as f_col:
    all_shapes = []
    for shapefile_record in f_col:
        current_shape = {}
        current_shape['shape'] = shapely.geometry.asShape(shapefile_record['geometry'])
        minx, miny, maxx, maxy = current_shape['shape'].bounds
        current_shape['bounding_box'] = shapely.geometry.box(minx, miny, maxx, maxy)
        current_shape['properties'] = shapefile_record['properties']
        all_shapes.append(current_shape)
Run Code Online (Sandbox Code Playgroud)

还要检查另一个非常简化的形状版本,即由最大的内切矩形(或三角形)制成的形状是否有用?

检查匀称的文档,它似乎没有这个功能.也许一些设置simplify()?当然,我总是希望确保新的简化形状不会超出原始形状的范围,因此我不必调用contains() …

python gis point-in-polygon shapely

8
推荐指数
1
解决办法
1913
查看次数

快速找到离点最近的多边形的方法

我有一个Shapely多边形列表和一个像这样的点:

from shapely.geometry import Point, Polygon

polygons = [Polygon(...), Polygon(...), ...]
point = Point(2.5, 5.7)
Run Code Online (Sandbox Code Playgroud)

我想在列表中找到最接近该点的多边形。我已经知道object.distance(other)返回两个几何形状之间的最小距离的函数,我想过计算循环中的所有距离以找到最近的多边形:

polygons = [Polygon(...), Polygon(...), ...]
point = Point(2.5, 5.7)
min_dist = 10000
closest_polygon = None

for polygon in polygons:
    dist = polygon.distance(point)
    if dist < min_dist:
        min_dist = dist
        closest_polygon = polygon
Run Code Online (Sandbox Code Playgroud)

我的问题是:有没有更有效的方法来做到这一点?

python polygon shapely

5
推荐指数
1
解决办法
2884
查看次数

使用 shapely 指向多边形?

我正在运行以下脚本,我认为该脚本应该为多边形中的点返回 TRUE,但它返回 FALSE。

from shapely import geometry

polygon = [(-1571236.8349707182, 8989180.222117377), (1599362.9654156454, 8924317.946336618), (-1653179.0745812152, 8922145.163675062), (-1626237.6614402141, 8986445.107619021)]

Point_X = -1627875.474
Point_Y = 8955472.968

line = geometry.LineString(polygon)
point = geometry.Point(Point_X, Point_Y)

print(line.contains(point))
Run Code Online (Sandbox Code Playgroud)

当我在 Matlab 中绘制多边形并指向时,我得到以下形状

在此处输入图片说明

from matplotlib import pylab as plt
poly = [[-1571236.8349707182, 8989180.222117377],
    [1599362.9654156454, 8924317.946336618],
    [-1653179.0745812152, 8922145.163675062],
    [-1626237.6614402141, 8986445.107619021]]

x = [point[0] for point in poly]
y = [point[1] for point in poly]

p1 = [-1627875.474, 8955472.968]
p2 = [-1627875.474, 8955472.968]
plt.plot(x,y,p1[0],p1[1],'*r',p2[0],p2[1],'*b')
plt.show()
Run Code Online (Sandbox Code Playgroud)

知道为什么匀称的脚本返回 FALSE 吗?

python matlab matplotlib shapely

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

标签 统计

python ×3

shapely ×3

gis ×1

matlab ×1

matplotlib ×1

point-in-polygon ×1

polygon ×1