Questions tagged «shapely»

Shapely是一个开源Python软件包,用于构建和分析地理信息系统通用的2D平面几何对象。


3
使用Python检查点是否在多多边形内
我已尝试使用诸如shapefile,fiona和ogr之类的库的几个代码示例,以尝试检查点(x,y)是否落在用ArcMap创建的多面体的边界内(从而以shapefile格式)。但是,尽管这些示例对于常规的单个多边形shapefile也能很好地工作,但是它们都不能很好地与multipolygons配合使用。我尝试过的一些代码片段如下: # First example using shapefile and shapely: from shapely.geometry import Polygon, Point, MultiPolygon import shapefile polygon = shapefile.Reader('shapefile.shp') polygon = polygon.shapes() shpfilePoints = [] for shape in polygon: shpfilePoints = shape.points polygon = shpfilePoints poly = Polygon(poly) point = Point(x, y) # point in polygon test if polygon.contains(point): print …

5
Windows上的GEOS和Shapely安装
尝试在Windows 64位计算机上安装Shapely时,无法使GEOS库正常工作。 到目前为止,我已经运行了OSGeo4W安装程序,从中安装了GDAL(我相信该软件包中包含geos库)。之后,我检查了C:\OSGeo4W\bin目录中是否有geos_c.dll ,但是我错过了一些配置步骤,或者库不起作用。 我需要Shapely来工作,因此我也pip install shapely安装了GDAL之后也运行了,显然可以使用(尽管找不到GEOS的C库)。 在我的代码中,我可以导入Shapely,但是当我尝试使用它时,出现一条错误消息,告诉我"geos.dll"找不到。
12 qgis  python  gdal  shapely 

3
在Python中高效获取多个多边形的交集
我想得到多个多边形的交集。使用Python的shapely程序包,我可以使用intersection函数找到两个多边形的交点。是否有类似的有效函数来获取多个多边形的交集? 这是一个代码片段,以了解我的意思: from shapely.geometry import Point coord1 = ( 0,0 ) point1 = Point(coord1) circle1 = point1.buffer(1) coord2 = ( 1,1 ) point2 = Point(coord2) circle2 = point2.buffer(1) coord3 = ( 1,0 ) point3 = Point(coord3) circle3 = point3.buffer(1) 可以找到两个圆的交点circle1.intersection(circle2)。我可以找到所有三个圆的交点circle1.intersection(circle2).intersection(circle3)。但是,这种方法不适用于大量的多边形,因为它需要越来越多的代码。我想要一个接受任意数量的多边形并返回其交点的函数。

2
从shapefile MultiPolygons创建匀称的MultiPolygons
我正在使用Fiona读取shapefile: with fiona.open('data/boroughs/boroughs_n.shp') as source: mpolys = [p for p in source] candidate = polys[0]['geometry'] 这给了我一个包含坐标列表列表的字典,并键入“ MultiPolygon”。但是,我不确定如何使用坐标数据来创建Shapely MultiPolygon,因为它需要 a sequence of exterior ring and hole list tuples: [((a1, ..., aM), [(b1, ..., bN), ...]), ...]. 有没有使用Fiona和Shapely的“正确”方法?
12 python  shapely  fiona 

4
匀称地使用:在多边形和多多边形之间转换
[编辑:解决方案只是使用OGR读取shapefile。参见geographika的示例。] 在ESRI shapefile中,“多边形”和“多多边形”之间没有区别。此外,内部孔和外部环之间没有明确的区别(除了给定多边形的“手感”)。 因此,在读取shapefile之后,我获得了描述环的坐标序列的列表,但是如果不进行更深入的处理,我将无法区分这些环中的哪些是外环,内孔或其他多边形。 似乎对于shapely的Polygon和MultiPolygon构造函数,必须明确区分外圈和内圈,所以我应该如何从不清晰的圈列表移动到有序的一组分离的多边形,并明确指定内圈和外圈? 总结一下:如果我有一个多边形环的列表,但是我不知道哪些环是内部的孔或单独的多边形,那么如何最好地将它们分类为具有指定内部孔的单独的多边形? 我正在寻找一种可以在python中实现的简单算法解决方案,该解决方案可用于在1分钟或更短的时间内处理数百个多边形,而我这样做是为了执行大量的交集。

1
Python:根据条件中断线串
我有一堆线串的geopandas数据框,其中的一些数据与每个顶点/点相关: Point_x = (Lat, Lon, Time, ID, Data1, Data2, Data3) 这些点将根据ID转换为线串,并按时间排序。 我想在满足某些条件的地方断开线串。此时,点之间的距离大于某个值。将来,数据字段的功能可能会有所价值。例如,当Speed超过5 kph时拆分线串。 当前的问题是,某些轨道是由具有重复ID的点形成的,因此线串在很长的距离上来回跳跃,我希望有一个阈值来打破这些线。 关于构建此方法的正确方法或可能有用的库/方法的任何想法? 该数据帧有超过15万条磁道,每个磁道中有许多点,因此效率会很高。 这是轨道DF的示例: ID geometry 204235000 LINESTRING (37.62001 -28.99535, 37.62015 -28.9... 205400000 LINESTRING (3.807816666666666 -18.083181666666... 207138000 LINESTRING (22.73206 -34.97915833333333, 22.73... 209016000 LINESTRING (8.447673333333331 -23.522783333333... 这是DF点的示例。共有18列,包括日期时间,时间点(经度,纬度),速度,大小等: Index Heading Latitude Longitude ID 20 92.8 -35.946802 13.089695 210725000 21 …

2
匀称地阅读Postgis几何
我正在ipython Notebook中使用geopandas和shape进行小型工作流,​​有时从shapefile,有时从postgis(执行更昂贵的处理)中提取一堆地理空间数据。 现在,我使用将该postgis表拖入python中sqlalchemy,并一路将几何体转换为WKT,得到如下结果: sql = """ SELECT ST_AsText(ST_Transform(the_geom,4326)) as newgeom,* FROM public.parcels2010_small limit 5; """ parcels = pd.read_sql(sql, engine) parcels +----+---------------------------------------------------+---------------------------------------------------+-----------+-------------+ | id | newgeom | the_geom | parcel_id | osm_node_id | +----+---------------------------------------------------+---------------------------------------------------+-----------+-------------+ | 0 | MULTIPOLYGON(((-122.991093691444 38.4878691106... | 01060000209C0E00000100000001030000000100000097... | 1805792 | 66237 | +----+---------------------------------------------------+---------------------------------------------------+-----------+-------------+ | 1 | MULTIPOLYGON(((-122.444576448624 …

2
如何从两点创建匀称的LineString
如果有两个点,我要从中创建一个直线LineString对象: from shapely.geometry import Point, LineString A = Point(0,0) B = Point(1,1) 关于LineString状态的Shapely手册: Point实例序列不是有效的构造函数参数。A LineString由点描述,但不由Point实例组成。 因此,如果我有两个点A和B,是否有AB比我当前“最佳”猜测更短/更好/更容易的方式来创建线... AB = LineString(tuple(A.coords) + tuple(B.coords)) ...看起来很复杂。有没有更简单的方法? 更新资料 对于今天发布的Shapely 1.3.2,手册中的上述声明不再正确。所以从现在开始 AB = LineString([A, B]) 工程!
11 python  shapely 

1
Geopandas线多边形相交
我正在尝试查找多条线与两个不同地理数据框的多边形相交的位置: from shapely.geometry import Polygon, LineString import geopandas as gpd polygon = Polygon([(0, 0), (1, 0), (1, 1), (0, 1), (0, 0)]) line1 = LineString([(0.5, 0.5), (0.7, 0.7)]) line2 = LineString([(0.9, 0.9), (0.2, 0.6)]) poly_gdf = gpd.GeoDataFrame(geometry=[polygon]) line_gdf = gpd.GeoDataFrame(geometry=[line1, line2]) 这就是上面的地理数据框的样子(一个具有多边形,另一个具有两条线)。在我看来,两条线都与多边形相交: 但是,相交的输出非常令人困惑: print(line_gdf.intersects(poly_gdf)) 0真实 1错误 print(line1.intersects(polygon)) print(line2.intersects(polygon)) 真正 真正 …

2
形状长度属性的单位是多少?
我正在使用shapely非常简单地计算折线的长度: from shapely.geometry import LineString ... xy_list = [map(float,e) for e in xy_intm] line = LineString(xy_list) s = '%s,%s,%s' % (fr,to,line.length) 我的坐标在WGS84中。我似乎找不到有关shapely的length属性的任何信息。长度属性的单位是什么?有没有简单的方法可以转换成公里或米?
11 shapely  length  units 


3
跨国际日期变更线的多边形[-180 .. + 180经度]
我正在尝试为卫星轨道条带生成多边形。到目前为止,我有一种方法可以生成两条线,以[lat,long]表示每个条带的边缘。一些条带跨越了国际日期变更线,因此绕了一下: 我能够通过以下方式解决此问题ogr2ogr -wrapdateline: ogr2ogr -wrapdateline -f "ESRI Shapefile" test.shp orbits.shp 哪条线可能会分开 现在,我希望能够在两条线的内部生成多边形。因此,例如,在条幅的一个边缘与日期线交叉的情况下,当多边形出现在另一侧时会填充该多边形,例如: 我需要一种自动化的方法,因为我需要重复很多次任务。最好在python中,因为那是我生成线的方式。这是包含这些行的两个shapefile:wraparound ; datelinefixed

3
具有多边形的“贪婪”剪切线
我希望将一组折线(下图中的黑线)剪辑到多边形的外部边界。多边形内的任何空隙均应忽略。我理想的输出是黄色虚线。初始线可能是直线,也可能不是直线。图像是一个简化的示例,实际上多边形要复杂得多,并且有数百条线。我认为凸包不会起作用(但是我可能错了)。我对arcgis,qgis,arcpy,shapely等解决方案持开放态度。最好在python中进行编码,因为如有必要,我也对其他选项开放。为了使我的同事更容易共享工具,Arcgis也将是更可取的,但这不是必需的。 我现在能想到的最好的方法是将一条线与多边形相交,在所有边界相交处创建一组点。按距离到直线起点的距离对点进行排序。最远和最近的(FAC)点将是多边形的外边界。然后,使用FAC点从原始线中选择适当的顶点,并从适当的点创建黄色虚线。它应该可以工作,但看起来比必要的更为复杂。 一些其他想法: 这些线是线性的,足以进行点之间的简单距离计算,而不必进行线性参照。 如果有一种工具可以在一点上分割一条线,但是我找不到它,那么在arcpy中这很容易。 有人在想吗?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.