清理数据编辑

Elasticsearch 中的地理空间字段有一些限制,需要在上传之前解决。本节将介绍一些方法,帮助您解决此类数据的常见问题。

转换为 GeoJSON 或 Shapefile编辑

使用 ogr2ogrGDAL/OGR 套件的一部分)将数据集转换为 GeoJSON 或 Esri Shapefile。例如,使用以下命令将 GPX 文件转换为 JSON

# Example GPX file from https://www.topografix.com/gpx_sample_files.asp
#
# Convert the GPX waypoints layer into a GeoJSON file
$ ogr2ogr \
  -f GeoJSON "waypoints.geo.json" \ # Output format and file name
  "fells_loop.gpx" \ # Input File Name
  "waypoints" # Input Layer (usually same as file name)

# Extract the routes layer into a GeoJSON file
$ ogr2ogr -f "GeoJSON" "routes.geo.json" "fells_loop.gpx" "routes"

转换为 WGS84 坐标参考系编辑

Elasticsearch 仅支持 WGS84 坐标参考系。使用 ogr2ogr 将其他坐标系转换为 WGS84。

在以下示例中,ogr2ogr 将 shapefile 从 NAD83 转换为 WGS84。由于源数据集中的 .prj 附加文件,输入 CRS 会自动检测。

# Example NAD83 file from https://www2.census.gov/geo/tiger/GENZ2018/shp/cb_2018_us_county_5m.zip
#
# Convert the Census Counties shapefile to WGS84 (EPSG:4326)
$ ogr2ogr -f "Esri Shapefile" \
  "cb_2018_us_county_5m.4326.shp" \ # Output file
  -t_srs "EPSG:4326" \ # EPSG:4326 is the code for WGS84
  "cb_2018_us_county_5m.shp" \ # Input file
  "cb_2018_us_county_5m" # Input layer

通过将复杂几何图形分解为每个文档一个几何图形来提高性能编辑

有时,地理空间数据集由少量几何图形组成,这些几何图形包含大量单独的部分几何图形。这种情况的一个很好的例子是详细的世界国家边界数据集,其中加拿大或菲律宾等国家的记录有数百个小岛几何图形。根据数据集的最终用途,您可能希望分解此类数据集以保持每个文档一个几何图形,从而显着提高索引的性能。

# Example NAD83 file from www12.statcan.gc.ca/census-recensement/2011/geo/bound-limit/files-fichiers/2016/ler_000b16a_e.zip
#
# Check the number of input features
$ ogrinfo -summary ler_000b16a_e.shp ler_000b16a_e \
  | grep "Feature Count"
Feature Count: 76

# Convert to WGS84 exploding the multiple geometries
$ ogr2ogr \
  -f "Esri Shapefile" \
  "ler_000b16a_e.4326-parts.shp" \ # Output file
  -explodecollections \ # Convert multiparts into single records
  -t_srs "EPSG:4326" \ # Transform to WGS84
  "ler_000b16a_e.shp" \ # Input file
  "ler_000b16a_e" # Input layer

# Check the number of geometries in the output file
# to confirm the 76 records are exploded into 27 thousand rows
$ ogrinfo -summary ler_000b16a_e.4326-parts.shp ler_000b16a_e.4326 \
  | grep "Feature Count"
Feature Count: 27059

包含大量部分的记录(如上例所示)的数据集甚至可能会挂起 Kibana 地图文件上传器。

降低精度编辑

一些机器生成的数据集存储的十进制数比严格需要的多。作为参考,GeoJSON RFC 7946 坐标精度部分 指定六位数字是地面上约 10 厘米的常见默认值。地图应用程序中的文件上传器会自动将精度降低到 6 位小数,但对于大型数据集,最好在上传之前执行此操作。

在请求符合 RFC7946 的文件时,ogr2ogr 会生成具有 7 位小数度的 GeoJSON 文件,但如果数据的使用允许,则可以使用 COORDINATE_PRECISION GeoJSON 图层创建选项 进一步降低精度。

# Example NAD83 file from https://www2.census.gov/geo/tiger/GENZ2018/shp/cb_2018_us_county_5m.zip
#
# Generate a 2008 GeoJSON file
$ ogr2ogr \
  -f GeoJSON \
  "cb_2018_us_county_5m.4326.geo.json" \ # Output file
  -t_srs "EPSG:4326" \ # Convert to WGS84
  -lco "RFC7946=NO" \ # Request a 2008 GeoJSON file
  "cb_2018_us_county_5m.shp" \
  "cb_2018_us_county_5m"

# Generate a RFC7946 GeoJSON file
$ ogr2ogr \
  -f GeoJSON \
  "cb_2018_us_county_5m.4326.RFC7946.geo.json" \ # Output file
  -t_srs "EPSG:4326" \ # Convert to WGS84
  -lco "RFC7946=YES" \ # Request a RFC7946 GeoJSON file
  "cb_2018_us_county_5m.shp" \
  "cb_2018_us_county_5m"

# Generate a RFC7946 GeoJSON file with just 5 decimal figures
$ ogr2ogr \
  -f GeoJSON \
  "cb_2018_us_county_5m.4326.RFC7946_mini.geo.json" \ # Output file
  -t_srs "EPSG:4326" \  # Convert to WGS84
  -lco "RFC7946=YES" \ # Request a RFC7946 GeoJSON file
  -lco "COORDINATE_PRECISION=5" \ # Downsize to just 5 decimal positions
  "cb_2018_us_county_5m.shp" \
  "cb_2018_us_county_5m"

# Compare the disk size of the three output files
$ du -h cb_2018_us_county_5m.4326*.geo.json
7,4M	cb_2018_us_county_5m.4326.geo.json
6,7M	cb_2018_us_county_5m.4326.RFC7946.geo.json
6,1M	cb_2018_us_county_5m.4326.RFC7946_mini.geo.json

简化区域数据集编辑

区域数据集是多边形数据集,其中文档的边界不重叠。这对于行政边界、土地利用和其他连续数据集很常见。此类数据集的特殊之处在于,任何修改多边形线的地理空间操作都需要以相同的方式应用于多边形的公共边,以避免生成细小的间隙和重叠伪影。

mapshaper 是一个处理此类数据集的出色工具,因为它了解此类数据集并相应地处理它们。

根据区域数据集的使用情况,不同的地理空间精度可能就足够了。为整个星球显示的世界国家数据集不需要与南亚大陆国家地图相同的精度。

mapshaper 提供了一个 simplify 命令,该命令接受百分比、分辨率和不同的简化算法。

# Example NAD83 file from https://www2.census.gov/geo/tiger/GENZ2018/shp/cb_2018_us_county_5m.zip
#
# Generate a baseline GeoJSON file from OGR
$ ogr2ogr \
  -f GeoJSON "cb_2018_us_county_5m.ogr.geo.json" \
  -t_srs "EPSG:4326" \
  -lco RFC7946=YES \
  "cb_2018_us_county_5m.shp" \
  "cb_2018_us_county_5m"

# Simplify at different percentages with mapshaper
$ for pct in 10 50 75 99; do \
  mapshaper \
    -i "cb_2018_us_county_5m.shp" \ # Input file
    -proj "EPSG:4326" \ # Output projection
    -simplify "${pct}%" \ # Simplification
    -o cb_2018_us_county_5m.mapshaper_${pct}.geo.json; \ # Output file
  done

# Compare the size of the output files
$ du -h cb_2018_us_county_5m*.geo.json
2,0M	cb_2018_us_county_5m.mapshaper_10.geo.json
4,1M	cb_2018_us_county_5m.mapshaper_50.geo.json
5,3M	cb_2018_us_county_5m.mapshaper_75.geo.json
6,7M	cb_2018_us_county_5m.mapshaper_99.geo.json
6,7M	cb_2018_us_county_5m.ogr.geo.json

修复不正确的几何图形编辑

地图应用程序需要有效的 GeoJSON 或 Shapefile 数据集。除了提到的 CRS 要求外,几何图形也需要有效。 ogr2ogrmapshaper 都有尝试修复无效几何图形的选项

还有更多编辑

ogr2ogrmapshaper 是出色的地理空间 ETL(提取、转换和加载)实用程序,它们的功能远不止于此。详细阅读文档对于通过删除不需要的字段、优化数据类型、验证值域等来提高数据集质量非常有价值。最后,作为命令行实用程序,两者都可以自动化并添加到 QA 管道中。