Questions tagged «shapely»

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

2
使用OGR和Shapely更有效吗?[关闭]
我正在寻找有关如何提高我的python代码效率的一些建议。通常,效率对我来说并不重要,但是我现在正在处理一个美国地点超过150万点的文本文件。使用给定的设置,在一点上运行操作大约需要5秒钟;我需要把这个数字降下来。 我正在使用三个不同的python GIS软件包对这些点进行一些不同的操作,并输出一个新的带分隔符的文本文件。 我使用OGR读取县边界shapefile并访问边界几何。 匀称检查某个点是否在这些县中的任何一个县内。 如果在1之内,则使用Python Shapefile库从边界.dbf中提取属性信息。 然后,我将两个来源的一些信息写入文本文件。 我怀疑效率低下在于存在2-3层的循环...不太清楚该怎么做。我特别希望与有经验的人一起使用这3个软件包中的任何一个,因为这是我第一次使用它们。 import os, csv from shapely.geometry import Point from shapely.geometry import Polygon from shapely.wkb import loads from osgeo import ogr import shapefile pointFile = "C:\\NSF_Stuff\\NLTK_Scripts\\Gazetteer_New\\NationalFile_20110404.txt" shapeFolder = "C:\NSF_Stuff\NLTK_Scripts\Gazetteer_New" #historicBounds = "C:\\NSF_Stuff\\NLTK_Scripts\\Gazetteer_New\\US_Counties_1860s_NAD" historicBounds = "US_Counties_1860s_NAD" writeFile = "C:\\NSF_Stuff\\NLTK_Scripts\\Gazetteer_New\\NewNational_Gazet.txt" #opens the point file, reads …

3
外形不正确
我试图在新计算机上运行Shapely,并尝试从源代码安装它,使用其网页上的安装程序并使用pip install shapely。我尝试从库中进行的每个引用都会from shapely import *引发错误WindowsError: [Error 126] The specified module could not be found。在尝试利用Shapely并弄清楚如何使其正常运行时,是否有人有类似的经验? 引发的Python错误: WindowsError: [Error 126] The specified module could not be found 环境: Windows 7 64位 Python 2.7


3
变换形状多边形和MultiPolygon对象
是否有一种简单的方法可以将Shapely对象(即Polygons和MultiPolygons)从一个投影转换为另一个投影,而无需手动挖掘和提取坐标? 实际上,我现在甚至都不在乎它们是否是Shapely对象,我只想传递要素和投影,并获得重新投影的要素集。 这种功能是否存在,或者必须手动编码?

1
计算特殊邻域的焦点统计?
我正在寻找在指定条件附近的栅格中每个像元的焦点统计信息。 背景-我有三个二进制栅格,每个栅格代表一种感兴趣的植被类型。我想计算研究区域内任何单元格(例如,总和/总单元格)在20 km ^ 2之内每种植被类型的覆盖率。问题是我不能在每个像元周围使用简单的圆形或正方形邻域,因为如果这样做,用于计算总和的搜索区域将包含我研究区域之外的区域。此例外非常重要,因为统计数据将用作栖息地模型的输入,并且不能将我研究区域之外的区域视为可能的栖息地-它们已被城市化。包括它们会给我错误的统计数据。所以,我n由覆盖符合我的标准的区域所需的像元数确定)。标准是它们不属于市区范围内。我在想应该使用某种形式的细胞自动机。我从来没有在CA工作过。 我想我想要的是入门代码,或指向正确方向的东西。 回复以下评论: 假设我正在为研究站点边界上的一个单元格计算此统计信息。如果我将研究区域以外的所有区域都分配为零(或忽略NoData),那么我将获得一个统计数据,该统计数据大约代表了我感兴趣的区域覆盖范围的一半。因此,在约10 km ^ 2的区域中,覆盖范围百分比,而不是20 km ^ 2的区域。由于我正在研究家庭范围的尺寸,因此这一点很重要。邻居必须改变形状,因为那是动物观看/使用景观的方式。如果他们需要20 km ^ 2,他们会改变形状或家园。如果我不检查忽略NoData,则单元格输出将为NoData-NoData没有帮助。 截至2014年10月24日的“进度” 这是到目前为止我使用Shapely和Fiona提出的代码: import numpy as np import pprint import shapely from shapely.geometry import* import fiona from fiona import collection import math traps = fiona.open('C:/Users/Curtis/Documents/ArcGIS/GIS_Data/occurrence/ss_occ.shp', 'r') study_area = fiona.open('C:/Users/Curtis/Documents/ArcGIS/GIS_Data/Study_Area.shp', 'r') for i in study_area: …

1
寻找最接近的线段以定型使用?
背景 从一个已知的点开始,我需要针对MultiLineStrings表建立最近的周围“可见周长”,如图所示。 我在此站点上搜索了许多术语(例如,最小边,最小周长,最近的邻居,剪辑,包含多边形,可见性,捕捉,切割节点,光线跟踪,洪水填充,内部边界,路线,凹面船体),但是找不到与该场景匹配的任何先前问题。 图表 绿色圆圈是已知点。 黑线是已知的MultiLineStrings。 灰线表示从已知点开始的径向扫描。 红点是径向扫描和MultiLineStrings的最近交点。 参量 该点永远不会与MultiLineStrings相交。 该点将始终名义上位于MultiLineString中。 MultiLineString将永远不会完全包围该点,因此周长将为MultiLineString。 将有一个包含大约1,000个MultiLineString的表(通常包含大约100点的单行)。 考虑的方法 通过从已知点构造一系列线(例如,以1度为增量)进行径向扫描。 用MultiLineStrings建立每个径向扫掠线的最近交点。 当一条径向扫掠线不与任何MultiLineString相交时,这将指示周长中的间隙,该间隙将容纳在周长MultiLineString结构中。 摘要 尽管此技术将找到最接近的相交点,但不一定要找到所有最接近的周界节点,这取决于径向扫描的分辨率。谁能推荐一种替代方法来建立所有周界点,或以某种形式的缓冲,扇形或偏移来补充径向扫描技术? 软件 我的首选是使用SpatiaLite和/或Shapely作为解决方案,但是欢迎可以使用开源软件实现的任何建议。 编辑:工作解决方案(基于@gene的回答) from shapely.geometry import Point, LineString, mapping, shape from shapely.ops import cascaded_union from shapely import affinity import fiona sweep_res = 10 # sweep resolution (degrees) focal_pt = Point(0, 0) …

2
使用geopandas获取多边形区域?
给定一个geopandas GeoDataFrame包含一系列多边形的区域,我想获取列表中每个要素的面积(平方公里)。 这是一个很常见的问题,并且在过去通常建议的解决方案是使用shapely和pyproj直接(如这里和这里)。 有没有办法做到这一点geopandas?

2
用Shapely覆盖多边形
我正在尝试使用Shapely(给定的多边形A,B和C)捕获下面指示的所有非重叠多边形。而且,我希望这样做而无需迭代,测试相交等。这个问题的公认答案表达了PostGIS方法,但似乎“工会”对不同的人而言意味着不同的事情。

3
使用Python分解基于属性的多边形(形状为fiona)?
我一直在尝试创建一个功能,该功能基本上与QGIS的“溶解”功能相同。我认为这将超级容易,但显然并非如此。因此,从我收集到的信息来看,在这里使用fiona配合体形应该是最好的选择。我刚开始弄乱矢量文件,所以这个世界对我和python来说都是新的。 对于这些示例,我使用的是位于此处http://tinyurl.com/odfbanu的County shapefile, 所以这里是我收集的一些代码,但找不到使它们协同工作的方法 目前,我最好的方法是基于以下方法:https : //sgillies.net/2009/01/27/a-more-perfect-union-continued.html。它工作正常,并且我获得了52个状态的列表作为Shapely几何形状。如果有更直接的方法来完成此部分,请随时发表评论。 from osgeo import ogr from shapely.wkb import loads from numpy import asarray from shapely.ops import cascaded_union ds = ogr.Open('counties.shp') layer = ds.GetLayer(0) #create a list of unique states identifier to be able #to loop through them later STATEFP_list = [] for i in …

1
为什么Shapely的捕捉(GEO捕捉)无法按预期工作?
我试图使用Shapely / Geopandas将两条线彼此对齐,但是对齐的结果非常奇怪。我试过了 : import geopandas as gpd from shapely.geometry import * from shapely.ops import snap lines1 = gpd.GeoDataFrame.from_file('lines1.shp') lines1 = lines1.to_crs({'init': 'epsg:2227'}) lines2 = gpd.GeoDataFrame.from_file('lines2.shp') lines2 = lines2.to_crs({'init': 'epsg:2227'}) res = lines1 lines2_union = lines2.geometry.unary_union res.geometry = res.geometry.apply(lambda x: snap(x, lines2_union, 14)) res.to_file('result.shp', driver="ESRI Shapefile") 并得到了这个结果: lines1 = 红色线 …

2
如何将栅格多边形化为形状多边形
我正在寻找将栅格转换为多边形(无ArcPy)的开源python解决方案。 我确实知道将栅格转换为多边形的GDAL函数,这是手册:http : //pcjericks.github.io/py-gdalogr-cookbook/raster_layers.html#polygonize-a-raster-band 不过,我希望输出可以是形状多边形或任何临时存储在内存中的对象,而不是另存为文件。是否有任何程序包或代码来处理此问题? 如果栅格是在numpy数组中处理的,则此方法将在下面列出。

4
从坐标多边形以KM为单位的面积
我在(python形状)的坐标中有多边形,看起来像这样 POLYGON ((24.8085317 46.8512821, 24.7986952 46.8574619, 24.8088238 46.8664741, 24.8155239 46.8576335, 24.8085317 46.8512821)) 我想以km ^ 2计算此多边形的面积。用Python做到这一点的最佳方法是什么?
14 python  polygon  area  shapely 

1
将特征计数为形状多边形的交点
我有一个包含数百个形状和几何形状的大熊猫 。多边形在很多地方重叠。我想制作一个新几何,其中包含其中有多少重叠的计数。像这样:GeoDataFramePolygonMultiPolygon 有人对如何解决这个问题有任何想法吗?我什至看不到办法。 最终,我特别希望能够对多边形进行加权,以使某些多边形自己值2。使用shapely的Z字段执行此操作可能很好。 除了:我与这些库都不特别相关,这就是我最终的去向。这些几何形状中的坐标实际上是像素坐标-我正努力制作栅格以使其覆盖在另一幅图像上。我希望将占用空间保持尽可能小,因为我希望能够将这些资源部署到可能无法安装随机资源的云服务器等中。

3
了解RTree使用空间索引的情况?
我在理解RTree的空间索引使用方面遇到麻烦。 示例:我有300个缓冲点,我需要用多边形shapefile知道每个缓冲区的相交区域。多边形shapefile具有> 20,000个多边形。建议我使用空间索引来加快此过程。 所以...如果我为多边形shapefile创建空间索引,它会以某种方式“附加”到文件,还是会独立存在?也就是说,创建完之后,我可以在多边形文件上运行交集函数并获得更快的结果吗?交叉点会“看到”有空间索引并且知道该怎么做吗?还是我需要在索引上运行它,然后通过FID或类似的方法将那些结果关联回我的原始多边形文件? RTree文档对我没有太大帮助(可能是因为我只是在学习编程)。它们显示了如何通过读取手动创建的点,然后针对其他手动创建的点查询索引来创建索引,这些其他点返回包含在窗口中的ID。说得通。但是,他们没有解释这与索引将来自的原始文件之间的关系。 我认为它必须是这样的: 从我的多边形shapefile中为每个多边形要素拉出bbox,并将其放置在空间索引中,为其提供一个与shapefile中的id相同的ID。 查询该索引以获取相交的ID。 然后,仅对通过查询索引确定的原始shapefile中的要素重新运行交集(不知道我将如何做最后一部分)。 我有正确的主意吗?我有什么想念的吗? 现在,我正在尝试使此代码在仅包含一个点要素的一个点shapefile和一个包含> 20,000个面要素的多边形shapefile上工作。 我正在使用Fiona导入shapefile,使用RTree添加空间索引,并尝试使用Shapely进行交点。 我的测试代码如下: #point shapefile representing location of desired focal statistic traps = fiona.open('single_pt_speed_test.shp', 'r') #polygon shapefile representing land cover of interest gl = MultiPolygon([shape(pol['geometry']) for pol in fiona.open('class3_aa.shp', 'r')]) #search area areaKM2 = 20 #create empty spatial index …

4
使用Shapely将单个线段焊接到一个LineString中
我在python中使用Shapely,并给了MultiLineString它一堆Linestring对象。我可以保证所有LineString对象都是只有2个顶点的简单线,并且它们都是一条直线的一部分(无分支)。 我想“连接点”并创建一个LineString。我是否需要为此编写递归焊接方法,还是有更快的方法?
13 python  shapely 

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.