将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添加了对直接使用resultOffsetresultRecordCount参数分页的支持。不幸的是,大多数服务器不支持此功能,因为后端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^{}中提取的,它的灵感来自于^{}中的代码。类似的node/javascript模块在^{}中可用。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
随机如何深入审查某些函数的内部Java实现?   mysql Java/GlassFish MySQLNonTransientConnectionException   java访问枚举元素的位置   Android:Java在很多类中是否效率较低   java中字节数组到短数组再返回   java AutoRotate不会在setRequestedOrientation之后更改OnConfiguration   工件部署期间发生java GlassFish4错误   java添加片段会导致崩溃   在ListView(Android)上使用OnTouchListener时java崩溃   Java接口静态变量未初始化   javafx获取Java中MediaPlayer的当前状态   java获取所有选定的JList项JFrame表单Netbeans   java重写hashcode和等于强制所有实例是相同的   java如何将此日期格式与正则表达式匹配?   Java中的异常处理是一种测试形式吗?   spring hibernate查询中的java日期   java如何维护持久的后台线程?   java以一定的比率运行方法   java添加了与GWT的集成