标签: shapely

检查点是否在多边形内会在 Shapely 中返回错误结果

我有一个多边形作为 wkt 格式的字符串:

polygon_as_string = 'POLYGON ((1190500.159499999 7144386.067199998, 1190487.2751 7144390.519699998,...,1190500.159499999 7144386.067199998))'
Run Code Online (Sandbox Code Playgroud)

我将其转换为 Shapely 的Polygon对象:

import shapely.wkt
polygon = shapely.wkt.loads(polygon_as_string)
Run Code Online (Sandbox Code Playgroud)

然后我用within()或 用contains()函数检查该点是否在我的多边形中。

from shapely.geometry import Point, Polygon
point = Point(1190500.159499999, 7144386.067199998)
polygon.contains(point)
point.within(polygon)
Run Code Online (Sandbox Code Playgroud)

两个函数都返回,False尽管我采取的点实际上是在polygon. 这里可能出了什么问题?

python point polygon shapely

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

Geopandas - split lines at intersection with polygons, retain polygon ID in new link attributes

我有两个地理数据框:一个包含许多线串,另一个包含许多多边形。这些直线和多边形彼此相交。我试图实现的输出是一个新的地理数据框,其中包含已在与多边形相交的任何位置处分割的链接。

简化测试代码如下:

import geopandas
from shapely.geometry import Polygon, LineString

#Create geodataframe containing 2 links:
linkID = ['1','2']
link_geom = [LineString([(0, 0), (10, 10)]),LineString([(10, 10), (20, 10)])]
a = {'linkID':linkID,'geometry':link_geom}
gdf_links = geopandas.GeoDataFrame(a)

#Create geodataframe containing 2 polygons:
polyID = ['100','200']
poly_geom = [Polygon([(2, 1), (2, 3), (4, 3), (4, 1)]),Polygon([(15, 7), (15, 13), (18, 13), (18, 7)])]
b = {'polyID':polyID,'geometry':poly_geom}
gdf_poly = geopandas.GeoDataFrame(b)
Run Code Online (Sandbox Code Playgroud)

通过运行以下代码,您可以看到线条与多边形相交:

links = gdf_links.unary_union
polys = gdf_poly.unary_union
geopandas.GeoSeries([links,polys]).plot(cmap='tab10')
Run Code Online (Sandbox Code Playgroud)

生成下图(以红色/绿色添加注释以显示涉及的各种元素):

在此输入图像描述

将两条线在与 polgyon 相交的任意位置分割将得到 6 条线段(如上图中绿色标记)。

理想情况下,我想要实现的输出如下所示,其中“poly_intersect”列列出了发生分割的多边形的 ID。请注意,第 2 …

python intersection polygon shapely geopandas

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

如何使用 GeoPandas 将点的 GeoSeries 转换为元组列表(纬度、经度)

我有一个名为 GeoPandas 数据框barrios,我使用barrios.geometry.centroid它并将其分配给center.

索引和值center也是如此-geopandas.geoseries.GeoSeriesPOINT (-58.42266 -34.57393)

我需要获取这些坐标并将它们保存为列表

[(point_1_lat, point_1_lon), (point_2_lat, point_2_lon), ...]
Run Code Online (Sandbox Code Playgroud)

我试过:

[center.values.y , center.values.x]
Run Code Online (Sandbox Code Playgroud)

但它返回一个包含 2 个数组的列表 - [array(lat), array(lng)]

我怎样才能得到想要的结果?

python shapely geopandas

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

如何从中心点计算矩形的纬度和经度

I would like to draw a rectangle based on a center point lat and lon assuming a given length and width, let's say 4.5m and 1.5m, respectively. I guess, we need the bearing too. I've made a simulation by drawing a rectangle on Google Earth, getting the positions and putting them on my code. However, I need something automatic. My question is how can I link the Cartesian coordinates to those four points (rectangle) in meters.

Here is my code: …

dictionary latitude-longitude coordinates shapely folium

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

如何使用shapely缩放多边形?

我正在尝试将一种形状缩放为更大的形状,如下所示: 在此输入图像描述

我这里有一个例子

poly_context = {'type': 'MULTIPOLYGON',
'coordinates': [[[[1, 2], [2, 1], [4, 3], [3, 4]]]]}
poly_shape = shapely.geometry.asShape(poly_context)
Run Code Online (Sandbox Code Playgroud)

python shapely

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

对 geopandas 中相交/重叠的几何图形进行分组和组合

我有一个 geopandas 数据框,其中有几行具有重叠的多边形几何形状以及索引(唯一且连续)。我想将重叠的多边形几何形状合并为多多边形,并保留各个重叠多边形的相应最小索引。

例如:地理数据框如下:

原始地理数据框

假设索引为 10233、10235、10238 的多边形几何图形重叠。我想要一个单行,将这些几何图形合并在一个多多边形中(而不是 3 个单独的几何图形),并且相应的索引应该是 3 行的最小索引,即 10233。我想对整个地理数据框执行此操作

我尝试使用 geopandas 的溶解函数:

gdf = gdf.dissolve(by = 'index').reset_index()

由于“索引”是唯一的,因此这不会执行任何操作。我也尝试过:

gdf = gdf.dissolve().reset_index()

然而,这将所有几何图形组合成单行的多多边形

python gis python-3.x shapely geopandas

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

如何使用Shapely提取内部多边形坐标?

我是Shapely的新手(但对此充满热情),最近我发现了一点路障.

我有一个我通过Fiona阅读的多边形shapefile.这个shapefile包含BOTH多边形和多边形项目,我需要为其中的所有坐标(即外部和/或内部)的每个特征构建一个数组.值得注意的是,两个多边形项目具有内环(并且它们是有效的).

我似乎没有问题访问多边形/多边形的外部坐标...但我没有拉内部坐标的任何东西.

我需要在这里采用一种新方法(即LinearRings)......?

def convert_polygons(inFile):

    for polys in fiona.open(inFile):
        myShape = shape(polys['geometry'])
        exterior_poly = 0
        interior_poly = 0
        if isinstance(myShape, Polygon):
            print "yes, I am a polygon"
            # count how many points for each interior polygon
            try:
                interior_poly += len(myShape.interior.coords)
            except:
                pass
            # count how many points for each exterior polygon
            exterior_poly += len(myShape.exterior.coords)
            geomArray = asarray(myShape.exterior)
            print geomArray
            print "number of interior points in polygon " + str(interior_poly)
            print "number of exterior points in polygon " + str(exterior_poly) …
Run Code Online (Sandbox Code Playgroud)

python gis graph shapely fiona

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

从点到多边形的距离(在内部时)

我正在尝试找到一种有效的方法来计算python中从点到多边形的最近边缘的距离.我认为它的形状很完美,但它只计算点在多边形外的距离.我想过opencv,它有一个内置函数,但它需要整数坐标(我不能离散我的数据).多边形不保证是凸的.

python geometry numpy point-in-polygon shapely

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

多边形周长

给定一个如下构造的多边形:

from shapely.geometry import Polygon
print Polygon([(0,0), (4,0), (2,4)]).area
Run Code Online (Sandbox Code Playgroud)

这正确地计算了三角形的面积.但是,如果我用'perimeter'替换area属性,我得到以下消息:'Polygon'对象没有属性'perimeter',这似乎很荒谬.当然,匀称必须能够像区域一样容易地找到多边形的周长?我已经搜索了这个主题一段时间(例如'python shapely perimeter'和'python polygon perimeter')但没有出现相关结果.

所以请帮我在里面找到一个命令,让我可以计算出多边形的周长.

python polygon shapely

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

Python匀称的Polygon.contains(Point)没有给出正确的答案(我认为)

from shapely.geometry import Polygon, Point

p = Point(2,2)
poly = Polygon((0,0), (0,5), (5,0), (5,5))

print poly.contains(p)
Run Code Online (Sandbox Code Playgroud)

False尽管我确信(2,2)长度在一平方尺之内,但可以打印出来5。或者也许我只是不知道contains方法是如何工作的。p.within(poly)也回来了False。我是在Polygon正确使用类吗?还是我真的对几何不好?

python shapely

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