Questions tagged «fiona»

Fiona是OGR的全新,简洁的Pythonic API

10
如何轻松移动向量数据集中的所有特征?
假设我将一个Shapefile放在一起,所有要素的顶点都移动了恒定量。转移所有特征的最简单方法是什么(因此(x,y),其顶点位置)进行任意偏移?我有很多文件要应用此更正,因此首选Bash / OGR答案:) 最后,我最终使用了Spatialite,因为它具有不错的功能ShiftCoords。但是,该线程非常有用!谢谢大家!

4
无需QGIS,ArcGIS,PostGIS等的Python中的高效空间连接
我正在尝试进行空间连接,类似于此处的示例:是否存在“按位置连接属性”的python选项?。但是,这种方法似乎效率低下/缓慢。即使仅以250点的分数运行它,也要花费近2分钟的时间,而对于> 1,000点的shapefile,它完全失败。有没有更好的方法?我想完全在Python中完成此操作,而无需使用ArcGIS,QGIS等。 我也想知道是否有可能对一个多边形内所有点的属性(即总体)求和,然后将该数量加入到多边形shapefile中。 这是我要转换的代码。我在第9行出现错误: poly['properties']['score'] += point['properties']['score'] 其中说: TypeError:+ =:'NoneType'和'float'不受支持的操作数类型。 如果我将“ + =”替换为“ =”,则可以正常运行,但不会对字段求和。我也尝试过将它们设置为整数,但这也失败了。 with fiona.open(poly_shp, 'r') as n: with fiona.open(point_shp,'r') as s: outSchema = {'geometry': 'Polygon','properties':{'region':'str','score':'float'}} with fiona.open (out_shp, 'w', 'ESRI Shapefile', outSchema, crs) as output: for point in s: for poly in n: if shape(point['geometry']).within(shape(poly['geometry'])): poly['properties']['score']) += point['properties']['score']) …

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) …

3
使用Python生成GeoJSON
我想以编程方式使用shapefile中的多边形创建GeoJSON文件,但要从我自己的应用程序中添加属性。 对于shapefile来说,这很容易做到: def create_data_dayer(self,varlist, data): """ Creates a new shape to contain data about nodes. varlist is the list of fields names associated with the nodes. data is a list of lists whose first element is the geocode and the remaining elements are values of the fields, in the same …
16 python  geojson  ogr  fiona 

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 …

6
将原始数据读入大熊猫
是否可以将原始数据读入a geopandas GeoDataFrame,la a pandas DataFrame? 例如,以下工作: import pandas as pd import requests data = requests.get("https://data.cityofnewyork.us/api/geospatial/arq3-7z49?method=export&format=GeoJSON") pd.read_json(io.BytesIO(r.content)) 以下不是: import geopandas as gpd import requests data = requests.get("https://data.cityofnewyork.us/api/geospatial/arq3-7z49?method=export&format=GeoJSON") gpd.read_file(io.BytesIO(r.content)) 换句话说,是否可以在不先将数据保存到磁盘的情况下读取内存中的地理空间数据?

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 …

3
如何在Fiona中添加对FileGDB(Esri文件gdb API)驱动程序的支持?
对此有很多问题,但没有一个解决了我的问题。 我有一台机器有: Windows 7 x64 Python 3.4.3 x64 @中安装:gdalinfo --version --> GDAL 1.11.4, released 2016/01/25; gdal是GDAL-1.11.4-cp34-none-win_amd64.whl从这里通过轮子安装的 GDAL已安装到中C:\Python34\Lib\site-packages\osgeo。在那里,我有一堆用于gdal和ogr以及.pyd文件的.exe文件。 安装了fiona:是Fiona-1.6.3-cp34-none-win_amd64.whl从同一网站上的wheel安装的。 我能够运行以下代码,并且可以成功执行: import gdal import ogr from gdalconst import * shp = r"C:\Data\GIS\PTS.shp" driver = ogr.GetDriverByName('ESRI Shapefile') dataset = driver.Open(shp) layer = dataset.GetLayer() layer.GetFeatureCount() schema = layer.schema fields = [field.GetName() for field in …

1
GeoPandas to_file()保存不带坐标系的GeoDataFrame
我有 GeoPandas 0.2.1 py27_0 菲奥娜1.7.0 np110py27_1 Python 2.7.10 安装在Anaconda 2-4.1.1-Windows-x86环境中。我能够GeoDataFrame通过读取输入数据集并进行操作来构造数据,但是保存输出数据集不会保留坐标系。 import geopandas as gpd world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres')) world.to_file(driver='ESRI Shapefile',filename=r'C:\GIS\Temp\world_out.shp') 在world_out.shp不包含的特征和源shape文件的模式,但坐标系是未定义的(<Unknown>)。该world_out.prj文件为0 KB,不包含任何内容。 out = gpd.read_file(r'C:\GIS\Temp\world_out.shp') print out.crs >>> {} 我已经测试过使用纯Fiona执行此操作,并且可以很好地保存crs信息: import fiona datasrc_path = r'C:\Program Files (x86)\ArcGIS\Desktop10.4\TemplateData\TemplateData.gdb' with fiona.drivers(): with fiona.open(datasrc_path,layer='cities') as source: meta = source.meta meta['driver'] = 'ESRI Shapefile' meta['layer'] …

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 

1
Fiona的驱动程序
python软件包fiona有哪些驱动程序?当我查看手册时会说,[...] and the possible formats are enumerated in the fiona.drivers list. 但是,当我输入python时 from fiona import drivers print drivers > <function drivers at 0x108763050> 我如何看待它?
12 python  fiona 

7
Fiona ImportError:DLL加载失败
我一直在Linux上成功使用过出色的Shapely / Fiona组合,但是现在我需要在Windows上创建一种生产环境,并且只有一个问题。当我尝试导入fiona时,出现以下错误: 如果我尝试使用依赖关系沃克检查ogrext.pdy的依赖关系,似乎正在尝试加载GDAL 1.10版dll并失败。不过奇怪的是,我安装了GDAL 1.9.2,它似乎可以毫无问题地导入python(从osgeo import gdal)。因此,也许它甚至与fiona导入问题无关。另外,即时消息我100%下载了适用于python 2.7的fiona安装程序,因为我知道如果您使用供其他版本python使用的.pyd文件,则可能会出现问题。 请注意,即时通讯使用的是Python 2.7.5的独立安装,而不使用osgeo4w安装程序。

1
使用Python从投影坐标转换​​shapefile
新手在这里苦苦于GIS。我正在尝试使用在其县网站(县)网站上找到的shapefile来为密尔瓦基市(Milwuakee)绘制地图。我在这里取得了一些成功。我的代码是给: from pyproj import Proj, transform # wisconsing EPSG:32054 # epsg:4326 is for the entire world, wgs 84...not obvious inProj = Proj(init='epsg:32054') outProj = Proj(init='epsg:4326') x1,y1 = 2560131.496875003, 406816.434375003 x2,y2 = transform(inProj,outProj,x1,y1) print(x2,y2) 与输出, -65.70220967836329 43.08590211722421 问题是这是错误的。密尔沃基的lon / lat为-87.863984和42.920816。 其次,我如何以编程方式对整个shapefile执行此操作。我想将其绘制到底图中。当我尝试遵循此线程时,出现错误代码: with fiona.open("ward2012/ward.shp") as shp: ori = Proj(init='epsg:32054' ), dest= Proj(init='EPSG:4326',preserve_units=True) …
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.