FlatGeobuf¶
- 作者
杰夫麦克纳
- 联系
jmckenna在gatewaygeomatics.com
- 最后更新
2022-04-26
FlatGeobuf是一种针对矢量的优化二进制编码,基于 Flatbuffers ,它通过利用 Packed Hilbert R-Tree 空间索引,支持快速边界框空间过滤。FlatGeobuf的性能使其成为通过HTTP/“云”传输空间数据的首选格式之一。
更多信息¶
有关FlatGeobuf的更多信息,请访问:
文件列表¶
FlatGeobuf文件通常是具有fgb文件扩展名的单个二进制文件,例如:
countries.fgb
备注
想要跟随的Windows用户可以转换 MS4W 包括在内 demo.db SpatiaLite数据库转换为FlatGeobuf文件(适用于 国家 表)和命令(在内部执行 /ms4w/apps/local-demo/data/ )::
ogr2ogr -f FlatGeobuf countries.fgb demo.db countries
数据访问/连接方法¶
可通过OGR在地图服务器中访问FlatGeobuf FlatGeobuf driver 。您必须使用GDAL版本3.1.0或更高版本才能访问FlatGeobuf。
OGR使用FlatGeobuf文件中的空间层名称作为层。
连接参数必须包括 .fgb 扩展名,数据参数应该是OGR层的名称。
CONNECTIONTYPE OGR
CONNECTION "name.fgb"
DATA "layername"
小技巧
从MapServer 7.6.0版本开始,您还可以指定OGR驱动程序选项,并且对于FlatGeobuf驱动程序,您可以禁用对无效数据的检查,这对于实现最高性能至关重要:
CONNECTIONOPTIONS
"VERIFY_BUFFERS" "NO" # for maximum performance
END
步骤1:使用ogrinfo检查¶
首先,您应该确保您的本地GDAL/OGR版本包含“FlatGeobuf”驱动程序,方法是使用 --formats 命令:
ogrinfo --formats
Supported Formats:
...
FlatGeobuf -vector- (rw+v): FlatGeobuf
...
确认拥有FlatGeobuf驱动程序后,即可在文件上尝试ogrinfo命令以获取空间图层列表:
ogrinfo countries.fgb
INFO: Open of `countries.fgb'
using driver `FlatGeobuf' successful.
1: countries (Multi Polygon)
现在使用ogrinfo获取有关空间‘Country’层结构的信息:
ogrinfo countries.fgb countries -summary
INFO: Open of `countries.fgb'
using driver `FlatGeobuf' successful.
Layer name: countries
Geometry: Multi Polygon
Feature Count: 177
Extent: (-180.000000, -90.000000) - (180.000000, 83.645130)
Layer SRS WKT:
GEOGCRS["WGS 84",
ENSEMBLE["World Geodetic System 1984 ensemble",
MEMBER["World Geodetic System 1984 (Transit)"],
MEMBER["World Geodetic System 1984 (G730)"],
MEMBER["World Geodetic System 1984 (G873)"],
MEMBER["World Geodetic System 1984 (G1150)"],
MEMBER["World Geodetic System 1984 (G1674)"],
MEMBER["World Geodetic System 1984 (G1762)"],
MEMBER["World Geodetic System 1984 (G2139)"],
ELLIPSOID["WGS 84",6378137,298.257223563,
LENGTHUNIT["metre",1]],
ENSEMBLEACCURACY[2.0]],
PRIMEM["Greenwich",0,
ANGLEUNIT["degree",0.0174532925199433]],
CS[ellipsoidal,2],
AXIS["geodetic latitude (Lat)",north,
ORDER[1],
ANGLEUNIT["degree",0.0174532925199433]],
AXIS["geodetic longitude (Lon)",east,
ORDER[2],
ANGLEUNIT["degree",0.0174532925199433]],
USAGE[
SCOPE["Horizontal component of 3D system."],
AREA["World."],
BBOX[-90,-180,90,180]],
ID["EPSG",4326]]
Data axis to CRS axis mapping: 2,1
featurecla: String (0.0)
scalerank: Integer (0.0)
labelrank: Integer (0.0)
sovereignt: String (0.0)
sov_a3: String (0.0)
adm0_dif: Integer (0.0)
level: Integer (0.0)
type: String (0.0)
...
步骤2:在 Mapfile 中添加图层¶
对于OGR连接,始终建议设置CONNECTIONTYPE、CONNECTIONTYPE和DATA,如下所示:
/* Countries */
LAYER
NAME "countries"
TYPE POLYGON
STATUS ON
CONNECTIONTYPE OGR
CONNECTION "countries.fgb"
DATA "countries" # the OGR layername, found through ogrinfo
CONNECTIONOPTIONS
"VERIFY_BUFFERS" "NO" # for maximum performance (requires MapServer >=7.6.0)
END #connectionoptions
EXTENT -180.000000 -90.000000 180.000000 83.645130 # for maximum performance
PROCESSING "CLOSE_CONNECTION=DEFER" # for maximum performance
CLASS
NAME "World Countries"
STYLE
COLOR 200 200 200
OUTLINECOLOR 0 0 0
WIDTH 0.1
END #style
END #class
END #layer
步骤3:使用shp2img测试您的映射文件¶
使用MapServer命令行实用程序 Sp2IMG 要验证 Mapfile 是否创建了有效的地图图像,并显示绘制时间,例如:
shp2img -m flatgeobuf.map -o ttt.png -map_debug 3
msDrawMap(): rendering using outputformat named png (AGG/PNG).
msDrawMap(): WMS/WFS set-up and query, 0.000s
msDrawMap(): Layer 0 (countries), 0.012s
msDrawMap(): Drawing Label Cache, 0.002s
msDrawMap() total time: 0.015s
msSaveImage(flatgeobuf.png) total time: 0.008s
可选:配置WFS服务以输出FlatGeoBuf¶
从MapServer 6.0开始,您可以为您的WFS(或WMS)服务、OGR连接配置OUTPUTFORMAT。请参阅 废气再循环输出 有关更多信息,请参阅文档。
首先,必须在映射文件中为FlatGeobuf指定OUTPUTFORMAT,例如:
OUTPUTFORMAT
NAME "OGRFLATGEOBUF"
DRIVER "OGR/FlatGeoBuf"
FORMATOPTION "STORAGE=filesystem"
FORMATOPTION "FORM=simple"
FORMATOPTION "FILENAME=result.fgb"
FORMATOPTION "LCO:VERIFY_BUFFERS=NO"
END
下一步,您必须使用 wfs_getfeature_formatlist 元数据参数,在层级别,例如:
METADATA
"ows_title" "World Countries"
"ows_abstract" "World Countries, served by MS4W"
"ows_include_items" "all"
"gml_include_items" "all"
"gml_featureid" "ogc_fid"
"wfs_getfeature_formatlist" "OGRGML,OGRFLATGEOBUF"
"ows_geomtype" "MultiPolygon"
"wfs_use_default_extent_for_getfeature" "false"
END
通过GetCapilities请求验证OUTPUTFORMAT,并查找GetFeature/ResultFormat部分,例如:
http://127.0.0.1/cgi-bin/mapserv.exe?
map=/ms4w/apps/local-demo/flatgeobuf.map
&SERVICE=wfs
&VERSION=1.0.0
&REQUEST=GetCapabilities
它给出一个包含以下内容的响应:
一旦我们看到 OGRFLATGEOBUF 在GetCapables响应中,然后我们可以添加 &OUTPUTFORMAT=OGRFLATGEOBUF 添加到任何WFS GetFeature请求的结尾,例如:
http://127.0.0.1/cgi-bin/mapserv.exe?
map=/ms4w/apps/local-demo/flatgeobuf.map
&SERVICE=WFS
&REQUEST=GetFeature
&VERSION=2.0.0
&TYPENAMES=ms:countries
&STARTINDEX=0
&COUNT=1000
&SRSNAME=urn:ogc:def:crs:EPSG::4326
&BBOX=-333.02127061643835759,-189,326.66640061643835224,189,urn:ogc:def:crs:EPSG::4326
&OUTPUTFORMAT=OGRFLATGEOBUF
和一个名为 result.fgb 将会被退还。