从ESRI端点导出地理数据到GeoJSON
项目描述
esri-dump
从Esri REST端点抓取并写入GeoJSON文件。
安装
如果您只想使用命令行工具esri2geojson
,推荐的方法是创建一个虚拟环境并在此处安装。此方法不需要您使用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
选项以写入以换行符分隔的(\n
)GeoJSON功能行,然后可以将它们传递到其他应用程序。
Python模块
您可以在代码中使用此模块以将GeoJSON功能形状的Pythondict
添加到您的代码中
import json
from esridump.dumper import EsriDumper
d = EsriDumper('http://example.com/arcgis/rest/services/Layer/MapServer/1')
# Iterate over each feature
for feature in d:
print(json.dumps(feature))
d = EsriDumper('http://example.com/arcgis/rest/services/Layer/MapServer/2')
# Or get all features in one list
all_features = list(d)
方法论
该模块将尽力找到从Esri服务器检索数据的最有效方法,给定服务器的能力。我们使用了几种策略来获取数据,以下是按最到最有效顺序描述
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添加了对服务器端执行各种统计查询的支持,无需客户端下载整个数据集。对于支持此功能且不响应objectIds
查询的服务器,我们将使用最小和最大统计查询来找到objectId
列的最小和最大值,然后构建包含where
-子句的块,将范围缩小到两个围栏之间的objectId
。
几何四叉树查询
当服务器不支持这些方法时,我们将使用边界框进行递归四叉树查询。我们首先查询整个层的extent
。如果服务器返回恰好是maxRecordCount
数量的要素,我们将该extent
分成4个相等的矩形,并查询这些矩形。如果这些较小的查询返回maxRecordCount
要素,我们再次将矩形分割并继续,直到服务器返回少于maxRecordCount
的内容。
开发
要建议对此代码的更改或改进,请在Github上创建分支并在本地克隆您的仓库
git clone git@github.com:openaddresses/pyesridump.git # replace with your fork
cd pyesridump
我们使用Pipenv来管理开发依赖。确保您已安装Pipenv,然后安装开发依赖
pipenv install --dev
pipenv shell
当您从虚拟环境中运行esri2geojson
命令时,您的代码更改将反映出来。您还可以运行(并添加)测试来检查您的更改是否破坏了任何东西
nosetests
另请参阅
此Python模块是从OpenAddresses machine
中提取出来的,它受到了koop
代码的启发。在esri-dump
中有一个类似的node/JavaScript模块。
项目详情
下载文件
下载适用于您平台文件的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分发
构建分发
esridump-1.13.0.tar.gz的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 3ea0b856da1a55b327375fb1eec24d08ec2a5eeda8700a9e696159252876dca7 |
|
MD5 | b14f00db65cc4bf1bbbad794798472c4 |
|
BLAKE2b-256 | 994eaa53b76eda05c519aad88893384006046cef7ca5b94b2f9f5c364a78069f |