从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 |