切片命令:
tilelive-copy bridge:///home/bygis/data/daolutest.xml "foxgis+mongodb://localhost/dbname?tileset_id=daolu&owner=foxgis" --timeout=200000000
命令参数说明:
“bridge://” 文件协议,指定文件类型
“/home/bygis/data/daolutest.xml” 配置文件,配置切片参数
“foxgis+mongodb://” 自定义协议
“localhost/dbname” mongodb数据库地址
“tileset_id=daolu” 为矢量瓦片指定一个id,id名称可自定义
“owner=foxgis” 指定瓦片集的所有者
“–timeout=200000000” 设置超时时长,单位ms
一、配置文件说明
切片配置文件是一个xml文件,基本格式如下:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE Map[]>
<Map srs="+init=epsg:3857" maximum-extent="-20037508.34,-20037508.34,20037508.34,20037508.34">
<Parameters>
<Parameter name="bounds">25.6,-11.1,154,55.5</Parameter>
<Parameter name="center">0,0,0</Parameter>
<Parameter name="format">pbf</Parameter>
<Parameter name="minzoom">0</Parameter>
<Parameter name="maxzoom">12</Parameter>
<Parameter name="json"><![CDATA[{"vector_layers":[
{"id":"asia_a","description":"亚洲面","fields":{"gid":"Number"}},
{"id":"china_l","description":"国界线","fields":{"gid":"Number","gb":"Number"}}
]}]]></Parameter>
</Parameters>
<Layer name="asia_a" buffer-size="8"
srs="+init=epsg:3857">
<Datasource>
<Parameter name="type"><![CDATA[postgis]]></Parameter>
<Parameter name="geometry_field"><![CDATA[the_geom_webmercator]]></Parameter>
<Parameter name="extent"><![CDATA[-20037508.3,-20037508.3,20037508.3,20037508.3]]></Parameter>
<Parameter name="srid"><![CDATA[3857]]></Parameter>
<Parameter name="max_size"><![CDATA[10]]></Parameter>
<Parameter name="user"><![CDATA[ngcc]]></Parameter>
<Parameter name="password"><![CDATA[123456]]></Parameter>
<Parameter name="host"><![CDATA[192.9.105.123]]></Parameter>
<Parameter name="port"><![CDATA[5432]]></Parameter>
<Parameter name="table"><![CDATA[(SELECT * FROM data.admin_map_asia_a) as data]]></Parameter>
<Parameter name="dbname"><![CDATA[ngcc-storage]]></Parameter>
</Datasource>
</Layer>
<Layer name="china_l" buffer-size="8"
srs="+init=epsg:3857">
<Datasource>
<Parameter name="type"><![CDATA[postgis]]></Parameter>
<Parameter name="geometry_field"><![CDATA[the_geom_webmercator]]></Parameter>
<Parameter name="extent"><![CDATA[-20037508.3,-20037508.3,20037508.3,20037508.3]]></Parameter>
<Parameter name="srid"><![CDATA[3857]]></Parameter>
<Parameter name="max_size"><![CDATA[10]]></Parameter>
<Parameter name="user"><![CDATA[ngcc]]></Parameter>
<Parameter name="host"><![CDATA[192.9.105.123]]></Parameter>
<Parameter name="port"><![CDATA[5432]]></Parameter>
<Parameter name="table"><![CDATA[(SELECT * FROM data.admin_map_china_l) as data]]></Parameter>
<Parameter name="dbname"><![CDATA[ngcc-storage]]></Parameter>
<Parameter name="password"><![CDATA[123456]]></Parameter>
</Datasource>
</Layer>
</Map>
其中每一个<Layer></Layer>
标签指定一个图层,由包含在其中的<Datasource></Datasource>
定义数据源。
<Parameter></Parameter>
标签中定义的json参数是写入tilejson中的属性,按此格式定义每个图层中有哪些字段以及这些字段的数据类型(“String”或“Number”),便于以后配图使用。
二、DataSource标签的配置模板
1 postgis例子
<Layer name="asia_a" buffer-size="8"
srs="+init=epsg:3857">
<Datasource>
<Parameter name="type"><![CDATA[postgis]]></Parameter>
<Parameter name="geometry_field"><![CDATA[the_geom_webmercator]]></Parameter>
<Parameter name="extent"><![CDATA[-20037508.3,-20037508.3,20037508.3,20037508.3]]></Parameter>
<Parameter name="srid"><![CDATA[3857]]></Parameter>
<Parameter name="max_size"><![CDATA[10]]></Parameter>
<Parameter name="user"><![CDATA[ngcc]]></Parameter>
<Parameter name="password"><![CDATA[123456]]></Parameter>
<Parameter name="host"><![CDATA[192.9.105.123]]></Parameter>
<Parameter name="port"><![CDATA[5432]]></Parameter>
<Parameter name="table"><![CDATA[(SELECT * FROM data.admin_map_asia_a) as data]]></Parameter>
<Parameter name="dbname"><![CDATA[ngcc-storage]]></Parameter>
</Datasource>
</Layer>
2 shapefile例子
<Layer name="vector" srs="+init=epsg:4236">
<Datasource>
<Parameter name="type">shape</Parameter>
<!-- you can also point to your shapefile without the 'shp' extention -->
<Parameter name="file">/path/to/your/shapefile.shp</Parameter>
</Datasource>
</Layer>
3 geojson例子
<Layer name="layer" srs="+init=epsg:4326">
<Datasource>
<Parameter name="type">geojson</Parameter>
<Parameter name="file">/path/to/your/XXXX.geojson</Parameter>
</Datasource>
</Layer>
或
<Layer name="layer" srs="+init=epsg:4326">
<Datasource>
<Parameter name="type">geojson</Parameter>
<Parameter name="inline"><![CDATA[{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[0,0]},"properties":{"marker-color":"#ace","marker-size":"medium","symbol":"-","marker-symbol":"bus","marker-path":"/var/folders/6v/g9fjq5g12s7dh4r3717gkkrc0000gn/T/geojson-mapnikify-6349d0013c0834c3c9379580763c07cb.png"}},{"type":"Feature","geometry":{"type":"LineString","coordinates":[[0,0],[10,10]]},"properties":{"stroke":"#f0f0f0","stroke-width":2,"stroke-opacity":1}}]}]]></Parameter>
</Datasource>
</Layer>
4 gpx/ogr例子
<Layer name="gps_waypoints">
<Datasource>
<Parameter name="type">ogr</Parameter>
<Parameter name="file">test_point_line.gpx</Parameter>
<Parameter name="layer">waypoints</Parameter>
</Datasource>
</Layer>
5 tiff/gdal例子
<Layer name="GDAL Layer from TIFF file">
<Datasource>
<Parameter name="type">gdal</Parameter>
<Parameter name="file">/path/to/your/data/raster.tiff</Parameter>
</Datasource>
</Layer>
更多详见:https://github.com/mapnik/mapnik/wiki/XMLConfigReference
三、更新tilejson
运行以上命令进行切片,完成后会在mongodb数据库中的”tilesets”集合中生成一个tilejson,可以通过mongo shell运行db.tilesets.find({tileset_id:"daolu"}).pretty()
进行查看。同时会生成一个”tiles_daolu”集合,存储所有的矢量瓦片。
自动生成的tilejson会有某些属性缺失,需要手动更新,主要需要新增或更新以下属性:
{
name:"admin_data",
tiles:["http://192.168.1.101:3000/api/v1/tilesets/foxgis/daolu/{z}/{x}/{y}.vector.pbf"]
}