我在fedora 19中使用python.我想运行以下行Python:import shapely.geometry 出现以下错误:
OSError:无法找到或加载任何库geos_c icts of variants ['libgeos_c.so.1','libgeos_c.so']
我安装了Shapely包,以及以下两个库:
的glibc-2.17-4.fc19.i686.rpm
GEOS-3.3.8-2.fc19.i686.rpm
我只是在网上寻找这个问题的解决方案,但我还没找到
请帮我 !
如何获取/提取定义shapely
多边形的点?谢谢!
形状多边形的示例
from shapely.geometry import Polygon
# Create polygon from lists of points
x = [list of x vals]
y = [list of y vals]
polygon = Polygon(x,y)
Run Code Online (Sandbox Code Playgroud) 我有大量的多边形(~100000),并尝试找到一种智能的方法来计算它们与常规网格单元的交叉区域.
目前,我正在使用形状(基于它们的角坐标)创建多边形和网格单元.然后,使用一个简单的for循环我遍历每个多边形并将其与附近的网格单元进行比较.
只是一个小例子来说明多边形/网格单元格.
from shapely.geometry import box, Polygon
# Example polygon
xy = [[130.21001, 27.200001], [129.52, 27.34], [129.45, 27.1], [130.13, 26.950001]]
polygon_shape = Polygon(xy)
# Example grid cell
gridcell_shape = box(129.5, -27.0, 129.75, 27.25)
# The intersection
polygon_shape.intersection(gridcell_shape).area
Run Code Online (Sandbox Code Playgroud)
(顺便说一句:网格单元的尺寸为0.25x0.25,多边形的最大尺寸为1x1)
实际上,对于具有大约0.003秒的单个多边形/网格单元组合,这是非常快的.但是,在大量多边形上运行此代码(每个多边形可以与几十个网格单元相交)在我的机器上花费大约15分钟以上(最多30分钟,具体取决于交叉网格单元的数量),这是不可接受的.不幸的是,我不知道如何编写多边形交集的代码来获得重叠区域.你有什么建议吗?有一种形状的替代品吗?
如果Polygon的任何段相交,则Shapely将Polygon定义为无效,包括colinear的段.许多软件包将创建一个带有"切口"的区域或区域,如此处所示,其具有共线段(图像):
>>> pp = Polygon([(0,0), (0,3), (3,3), (3,0), (2,0),
(2,2), (1,2), (1,1), (2,1), (2,0), (0,0)])
>>> pp.is_valid
WARNING:shapely.geos:Self-intersection at or near point 2 0
False
Run Code Online (Sandbox Code Playgroud)
自然地,剪切可以在Shapely中原生实现,或者这个相同的几何体可以实现为两个有效的多边形,但是如果我只有上面显示的点列表,那么就很容易"修复"这个(从中创建有效的几何体)点数清单)?
存在具有顶点坐标列表的折线= [(x1,y1),(x2,y2),(x3,y3),...]和点(x,y).在Shapely中,geometry1.distance(geometry2)
返回两个几何之间的最短距离.
>>> from shapely.geometry import LineString, Point
>>> line = LineString([(0, 0), (5, 7), (12, 6)]) # geometry2
>>> list(line.coords)
[(0.0, 0.0), (5.0, 7.0), (12.0, 6.0)]
>>> p = Point(4,8) # geometry1
>>> list(p.coords)
[(4.0, 8.0)]
>>> p.distance(line)
1.4142135623730951
Run Code Online (Sandbox Code Playgroud)
但我还需要找到最接近点(x,y)的线上的点的坐标.在上面的示例中,这是LineString对象上距离Point(4,8)1.4142135623730951单位的点的坐标.方法distance()在计算距离时应该有坐标.有没有办法让它从这个方法返回?
我试图在GeoPandas中找到两个多边形的并集,并输出一个包含两个多边形点作为其顶点的几何体.该geopandas.overlay
函数为每个单独的联合提供了多边形,但我想要一个多边形.
对于上下文,我使用它将两个管理区域组合成一个区域(即包括一个国家内的城镇区域).
以下示例来自geopandas网站,并说明了我想要的内容:
from matplotlib import pyplot as plt
import geopandas as gpd
from shapely.geometry import Polygon
polys1 = gpd.GeoSeries([Polygon([(0,0), (2,0), (2,2), (0,2)]),
Polygon([(2,2), (4,2), (4,4), (2,4)])])
polys2 = gpd.GeoSeries([Polygon([(1,1), (3,1), (3,3), (1,3)]),
Polygon([(3,3), (5,3), (5,5), (3,5)])])
df1 = gpd.GeoDataFrame({'geometry': polys1, 'df1':[1,2]})
df2 = gpd.GeoDataFrame({'geometry': polys2, 'df2':[1,2]})
res_union = gpd.overlay(df1, df2, how='union')
res_union.plot()
Run Code Online (Sandbox Code Playgroud)
没有任何输出几何是我所期望的,具体如下:
poly_union = gpd.GeoSeries([Polygon([(0,0), (0,2), (1,2), (1,3), \
(2,3), (2,4), (3, 4), (3, 5), (5, 5), (5, 3), (4, 3), (4, 2), \
(3,2), (3,1), …
Run Code Online (Sandbox Code Playgroud) 我想计算红色和蓝色矩形之间的重叠区域"THE GREY REGION".
每个矩形由其四个角坐标定义.重叠区域的结果单位是单位平方.
我无法想象我该怎么办?
任何有创意的评论将不胜感激.
说我有以下多边形和点:
>>> poly = Polygon([(0, 0), (2, 8), (14, 10), (6, 1)])
>>> point = Point(12, 4)
Run Code Online (Sandbox Code Playgroud)
我可以计算点到多边形的距离......
>>> dist = point.distance(poly)
>>> print(dist)
2.49136439561
Run Code Online (Sandbox Code Playgroud)
...但我想知道最短距离所测量的多边形边界上的点的坐标.
我最初的方法是通过它与多边形的距离缓冲点,并找到该圆与多边形相切的点:
>>> buff = point.buffer(dist)
Run Code Online (Sandbox Code Playgroud)
但是,我不确定如何计算这一点.两个多边形不相交,所以
list(poly.intersection(buff))
不会给我这一点.
我是否在正确的轨道上?有更简单的方法吗?
我正在使用python,我已经定义了地图上多边形的纬度和经度(以度为单位).我的目标是检查一般P
坐标点是否x,y
落在这样的多边形内.因此,我希望有一个功能,允许我检查这种情况并返回True
或者False
如果该点在多边形内部或外部.
在这个例子中,点在外面,结果就是 False
问题:是否有允许达到目标的库/包?如果是,你推荐哪一个?你能给出一个如何使用它的小例子吗?
这是我到目前为止编写的代码:
import numpy as np
# Define vertices of polygon (lat/lon)
v0 = [7.5, -2.5]
v1 = [2, 3.5]
v2 = [-2, 4]
v3 = [-5.5, -4]
v4 = [0, -10]
lats_vect = np.array([v0[0],v1[0],v2[0],v3[0],v4[0]])
lons_vect = np.array([v0[1],v1[1],v2[1],v3[1],v4[1]])
# Point of interest P
x, y = -6, 5 # x = Lat, y = Lon
## START MODIFYING FROM HERE; DO NOT MODIFY POLYGON VERTICES AND DATA TYPE …
Run Code Online (Sandbox Code Playgroud) 当我尝试在我的Windows 64位计算机上安装Shapely时,我无法使GEOS库工作.
到目前为止,我已经运行了安装了GDAL的OSGeo4W安装程序(我相信地理库包含在该软件包中).之后,我检查了我的C:\OSGeo4W\bin
目录上有geos_c.dll ,但要么我错过了一些配置步骤,要么库不起作用.
我需要Shapely来工作,所以我也在pip install shapely
安装GDAL之后运行,它显然有效(尽管它找不到GEOS的C库).
在我的代码中,我可以导入Shapely,但是当我尝试使用它时,我收到一个错误,告诉我"geos.dll"
找不到.
任何有关这方面的帮助将非常感激.谢谢!