将geodata从esri端点转储到geojson
esridump的Python项目详细描述
ESRI转储
抓取esri rest端点并写入geojson文件。
安装
如果您只想使用命令行工具esri2geojson
,建议安装此软件包的方法是创建一个virtual environment并在那里安装它。此方法不要求您git clone
此存储库,并且可以使您快速启动和运行:
virtualenv esridump
source esridump/bin/activate
pip install esridump
用法
命令行
此模块将安装名为esri2geojson
的命令行实用程序,该实用程序接受esri rest层端点url和文件名,以便将输出geojson写入:
esri2geojson http://cookviewer1.cookcountyil.gov/ArcGIS/rest/services/cookVwrDynmc/MapServer/11 cookcounty.geojson
您可以使用特殊的输出文件名-
(一个短划线字符)写入stdout
。
您还可以传入--jsonlines
选项来编写geojson特性的换行分隔(\n
)行,然后您可以将其导入其他应用程序。
python模块
您可以在代码中使用此模块将geojson特性形状的pythondicts
放入代码:
importjsonfromesridump.dumperimportEsriDumperd=EsriDumper('http://example.com/arcgis/rest/services/Layer/MapServer/1')# Iterate over each featureforfeatureind:print(json.dumps(feature))d=EsriDumper('http://example.com/arcgis/rest/services/Layer/MapServer/2')# Or get all features in one listall_features=list(d)
方法论
该模块将尽最大努力找到从esri服务器检索数据的最有效方法,给定the capabilities of the server。我们有几种获取数据的策略,按从高到低的顺序进行描述:
resultOffset
分页
在arcgis rest api版本10.3中,esri添加了对直接使用resultOffset
和resultRecordCount
参数分页的支持。不幸的是,大多数服务器不支持此功能,因为后端SQL引擎也必须配置为支持此功能。到目前为止,似乎只有esri托管层可靠地支持此功能。
objectId
字段分块
在arcgis rest api版本10.0中,esri添加了对服务器的支持,以返回层中所有功能的对象id的详尽列表。一旦检索到这个对象id列表,我们就使用objectIds
参数将其分成maxRecordCount
查询的块。
objectId
统计where
-子句
在arcgis rest api版本10.1中,esri增加了对在服务器上执行各种统计查询的支持,而无需客户端下载整个数据集。在支持这一点的服务器上,并且不响应该查询,我们将使用一个最小和最大的统计查询来查找最短的值和最大值,然后构建一个将两个变量之间的范围缩小到。
几何四叉树查询
当服务器不支持这些方法时,我们将使用边界封套进行递归四叉树查询。我们首先查询层的整个extent
。如果服务器返回的功能正好是maxRecordCount
个数,我们将该extent
分割成4个相等的矩形并查询它们。如果这些较小的查询返回maxRecordCount
特性,我们将再次分割矩形并继续,直到服务器返回小于maxRecordCount
的内容。
开发
要建议对此代码进行更改或改进,请在github上创建一个fork并在本地克隆存储库:
git clone git@github.com:openaddresses/pyesridump.git # replace with your fork
cd pyesridump
我们使用pipenv来管理开发依赖项。确保有Pipenv installed,然后安装开发依赖项:
pipenv install --dev
pipenv shell
从虚拟环境中运行esri2geojson
命令时,将反映对代码的更改。您还可以运行(和添加)测试以检查您的更改没有破坏任何内容:
nosetests
另请参见
这个python模块是从openaddresses^{