我有一个多边形作为 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. 这里可能出了什么问题?
我有两个地理数据框:一个包含许多线串,另一个包含许多多边形。这些直线和多边形彼此相交。我试图实现的输出是一个新的地理数据框,其中包含已在与多边形相交的任何位置处分割的链接。
简化测试代码如下:
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 …
我有一个名为 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)]。
我怎样才能得到想要的结果?
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: …
我这里有一个例子
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) 我有一个 geopandas 数据框,其中有几行具有重叠的多边形几何形状以及索引(唯一且连续)。我想将重叠的多边形几何形状合并为多多边形,并保留各个重叠多边形的相应最小索引。
例如:地理数据框如下:
假设索引为 10233、10235、10238 的多边形几何图形重叠。我想要一个单行,将这些几何图形合并在一个多多边形中(而不是 3 个单独的几何图形),并且相应的索引应该是 3 行的最小索引,即 10233。我想对整个地理数据框执行此操作
我尝试使用 geopandas 的溶解函数:
gdf = gdf.dissolve(by = 'index').reset_index()
由于“索引”是唯一的,因此这不会执行任何操作。我也尝试过:
gdf = gdf.dissolve().reset_index()
然而,这将所有几何图形组合成单行的多多边形
我是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中从点到多边形的最近边缘的距离.我认为它的形状很完美,但它只计算点在多边形外的距离.我想过opencv,它有一个内置函数,但它需要整数坐标(我不能离散我的数据).多边形不保证是凸的.
给定一个如下构造的多边形:
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')但没有出现相关结果.
所以请帮我在里面找到一个命令,让我可以计算出多边形的周长.
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正确使用类吗?还是我真的对几何不好?
shapely ×10
python ×9
geopandas ×3
polygon ×3
gis ×2
coordinates ×1
dictionary ×1
fiona ×1
folium ×1
geometry ×1
graph ×1
intersection ×1
numpy ×1
point ×1
python-3.x ×1