跳转到主要内容

从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添加了对使用resultOffsetresultRecordCount参数直接支持分页的功能。遗憾的是,大多数服务器不支持此功能,因为后端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 (12.8 kB 查看散列)

上传时间

构建分发

esridump-1.13.0-py3-none-any.whl (12.1 kB 查看散列)

上传时间 Python 3

支持