SVTiles 格式的矢量瓦片 |
SVTiles 是由 SuperMap 制定的一种利用 SQLite 数据库存储矢量瓦片数据的存储格式。
SVTiles 文件的命名由地图名、Hashcode、瓦片的宽和高及.svtiles 后缀组成(如:China_-678451788_256X256.svtiles)。
iServer 9D 后的版本,矢量瓦片支持风格属性信息。生成矢量缓存时,除生成SVTiles文件以外,同时也会生成.resource后缀的风格信息文件,用于存储矢量瓦片的风格属性信息。
风格信息文件也使用SQLite 数据库存储。文件的命名方式同SVTiles一致。
.svtiles 文件、.resource文件分别通过以下表格和视图来存储、管理矢量瓦片:
采用键值对的形式来存储矢量瓦片数据的相关设置,包括两个文本类型的字段”name”和”value”。表结构如图所示。
元数据表的内容举例如表1所示。
表1 元数据表举例
name |
value |
name | China |
version | 201401 |
bounds |
-20037508.342787,-20037508.342787,20037508.342787,20037508.342787 |
tile_origin | -20037508.342787,20037508.342787 |
crs_wkid |
3857 |
crs_wkt |
PROJCS["User Define", GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984", SPHEROID["WGS_1984",6378137.0,298.2572235630001, AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]], PRIMEM["Greenwich",0.0,AUTHORITY["EPSG","8901"]], UNIT["DEGREE",0.017453292519943295],AUTHORITY["EPSG","4326"]], PROJECTION["Popular Visualisation Pseudo Mercator", AUTHORITY["EPSG","1024"]], PARAMETER["False_Easting",0.0], PARAMETER["False_Northing",0.0], PARAMETER["Central_Meridian",0.0], PARAMETER["Latitude_Of_Origin",0.0], PARAMETER["Scale_Factor",1.0], UNIT["METER",1.0], AUTHORITY["EPSG","3857"]] |
tile_height | 256 |
tile_width | 256 |
scales | 1.690163e-9,3.380327e-9 |
resolutions |
156543.033928,78271.516964 |
geometry_storage_type |
SuperMapJson |
attribute_storage_type |
Json |
layer_infos |
[ {"Capitals": { "expand_pixels": 2 }, "Road": { "expand_pixels ": 2 }, "Provinces": { "expand_pixels ": 2 } } ] |
元数据表的各字段(keys)说明如表2所示:
表2 元数据表各字段描述
字段名称 | 说明 |
name | 地图的英文名称,如果地图名称为中文会自动转换为中文名称的拼音。 |
version | 矢量瓦片数据的版本,当前版本201401。 |
bounds | 地图的切图范围,使用的单位与地图单位保持一致。在 iServer 中 bounds 的格式为:左,下,右,上,例如:-180,-85,180,85。 |
tile_origin | 切图原点的位置。 |
crs_wkid | 坐标系的 EPSG Code(-1000为用户自定义坐标系,0为普通平面坐标系)。 |
crs_wkt | 用 wkt 表示的地理坐标系信息。(wkt:由开放地理空间联盟(OGC)制定的一种文本标记语言,详见:http://docs.geotools.org/stable/javadocs/org/opengis/referencing/doc-files/WKT.html) |
tile_height | 瓦片高度,通常为256。 |
tile_width | 瓦片宽度,通常为256。 |
scales | 各级分辨率对应的比例尺集合。 |
resolutions | 各级瓦片对应的分辨率的值。 |
geometry_storage_type | 几何对象存储的格式。支持的格式为SuperMapJson。 |
attribute_storage_type | 属性数据存储格式。支持的格式为Json。 |
layer_infos | 描述各图层的元数据信息。 |
包括所有的矢量瓦片数据和用于定位瓦片的值。如图所示。
瓦片数据表的各值说明如表3所示。
表3 SVTiles 瓦片数据表的值说明
字段名称 | 数据类型 | 描述 |
resolution | varchar | 分辨率,瓦片对应的分辨率。 |
tile_colum | integer | 瓦片列号。 |
tile_row |
integer |
瓦片行号。 |
tile_id | String | 切片 ID。 |
create_time | Text | 创建时间。 |
瓦片数据集内容举例如图所示。
记录切片中地理要素的几何信息。如图所示
几何对象表的各值说明如表4所示。
表4 SVTiles 几何对象表的值说明
字段名称 | 数据类型 | 描述 |
layer |
Text |
图层名。 |
fid |
Long | 地理要素 ID。 |
tile_id |
Text |
切片 ID。 |
geometry_data | Text | 几何对象。 |
每条记录对应了一个被裁剪后的几何对象,geometry_data 存储的是像素坐标。不同级别下,同一个几何对象的像素坐标是不一样的;同一级别下,一个几何对象可能横跨多个切片(如图1所示),切片中保存的是被裁剪后的几何对象(如图2所示)。
图1 横跨2个切片的地理要素
图2 裁剪后的几何对象
存储格式为 SuperMapJSON,如下所示:
{
“type”:”REGION”,
“points”:[0,0,256,0,256,256,0,256,0,0,1,1,3,3,2,2,1,1],
“parts”:[5,4]
}
记录了地理要素的属性信息。如图所示
属性信息表的各值说明如表5所示。
表5 SVTiles 属性信息表的值说明
字段名称 | 数据类型 | 描述 |
layer |
Text |
图层名。 |
fid |
Long | 地理要素 ID。 |
attr_data |
Text |
属性数据。 |
search_values |
Text | 查询内容。 |
属性是和地理要素是一一对应的。而每个地理要素的几何对象可以分布在不同的切片中(2.3),因此 attributes 和 geometry 是1对多的关系。attr_data 的 Json 形式如下所示:
{
“NAME”:”北京”,
“PostCode”:100000,
“POP”:11510000,
“Country”:”China”
}
search_values 是以英文逗号隔开的字符串,用于快速查询。如北京的 search_values 为:“北京,100000”。按 search_values 的查询语句形式如下所示:
where search_values like ‘%北京%’
基于 tiles、attributes、geometies 生成的 tilesfeatures 视图。如图所示
tilefeatures 视图的各值说明如表6所示。
表6 SVTiles tilefeature 视图的值说明
字段名称 | 数据类型 | 描述 |
resolution |
Double |
分辨率。 |
tile_column |
Long | 切片列号。 |
tile_row |
Long | 切片行号。 |
tile_id |
String | 切片 ID。 |
create_time |
Text | 创建时间。 |
layer |
Text | 图层名。 |
fid |
Integer | 地理要素 ID。 |
geometry_data |
Text | 几何对象。 |
search_values |
Text | 查询内容。 |
attr_data |
Text | 属性数据。 |
基于 tiles、attributes、geometies 生成的 tilesgeometries 视图用来完整地呈现 tile、tile 内部地理要素的几何信息。若不需要获取地理要素的属性信息,基于 tilegeometries 查询速度更快。如图所示:
tilegeometries 视图的各值说明如表7所示。
表7 SVTile stilegeometries 视图的值说明
字段名称 | 数据类型 | 描述 |
resolution |
Double |
分辨率。 |
tile_column |
Long | 切片列号。 |
tile_row |
Long | 切片行号。 |
tile_id |
String | 切片 ID。 |
create_time |
Text | 创建时间。 |
layer |
Text | 图层名。 |
fid |
Integer | 地理要素 ID。 |
geometry_data |
Text | 几何对象。 |
metadata
CREATE TABLE metadata (name text, value text);
CREATE UNIQUE INDEX metadata_idx ON metadata (name);
tiles
CREATE TABLE tiles (resolution double, tile_column integer, tile_row integer,tile_id text, create_time
text);
CREATE UNIQUE INDEX tiles_index on tiles(resolution,tile_column,tile_row);
Create index tiles_id_index ON tiles(tile_id);
geometries
CREATE TABLE geometries(layer text,fid long,tile_id text,geometry_data text );
CREATE UNIQUE INDEXgeometries_index ON geometries(layer ,fid,tile_id);
attributes
CREATE TABLE attributes( layer text, fid long, attr_datatext,search_values text);
CREATE UNIQUE INDEX attrbutes_index ON attributes (layer, fid);
tilefeatures
CREATE VIEW tilefeatures as
SELECT A.*,B.layer,B.fid,B.geometry_data,C.search_values,C.attr_data
FROM tiles as A,geometries as B,attributes as C
WHERE A.tile_id=B.tile_id and B.layer=C.layer and B.fid=C.fid
tilegeometries
CREATEVIEW tilegeometries as
SELECT A.*,B.layer,B.fid,B.geometry_data
FROM tiles as A,geometries as B
WHERE A.tile_id=B.tile_id
功能对比如表8所示:
表8 SVTile 功能对比
功能 |
V201310 | V201401 |
几何对象存储 | SuperMapJson | 扩展规范支持多种格式 SuperMapJson、WKT、GeoJson、GML |
要素属性存储 | 不支持 | XML,Json |
数据表对比如表9所示:
表9 SVTile 功能对比
版本 |
表说明 |
V201310 | metadata 元数据表。 |
tiles 切片表。 | |
tiles_data 字段中存储了所有的几何对象集合。 | |
V201401 | metadata 元数据表。 |
tiles 切片表。仅存储切片索引。 | |
geometries 几何对象表。 | |
attributes 属性信息表。 | |
tilefeatures 切片及要素视图。 | |
tilegeometries 切片及几何对象视图。 |
SuperMapJson 是 SuperMap iServer 定义的一种 Json 格式。该 Json 由以下三部分构成:
type:几何形状类型。
可选值有:POINT、LINE、REGION 分别对应 WKT 中的 MultiPoint、MultLineString、MultiPolygon。
points:表示一组像素坐标序列,相邻两项代表一个坐标。
parts:表示当前几何对象的分段信息,每一个分段代表一个子对象,分段的数值代表子对象点的个数。
示例:
{
“type”:”REGION”,
“points”:[0,0,256,0,256,256,0,256,0,0,1,1,3,3,2,2,1,1],
“parts”:[5,4]
}
上面示例中“parts”:[5,4]表示该对象两个分段,两个分段的坐标分别为:[0,0 ,256,0,256,256,0,256,0,0]、[1,1,3,3,2,2,1,1]。
注:对于 type 为 POINT 的几何对象,json 可不包含 parts 项。此类几何对象 points 中每一个坐标就表示一个子 POINT。
记录了每个图层的风格类型和风格描述信息。表中包含的字段如图所示:
风格信息表的各值说明如表10所示。
表10 resource文件style数据表各值说明
字段名称 | 数据类型 | 描述 |
layer name |
Text |
图层名。 |
type |
Text |
风格类型。目前支持CartoCSS。 |
style |
Text |
风格信息。 |
其中style字段描述了该图层的风格属性信息。示例如下:
#District@Changchun[zoom<=9.80459446371E-5][zoom>=1.05263157895E-5]{text-placement-type:simple;text-placements:"E,NE,SE,W,NW,SW";line-pattern-file:url(SYMBOLLINE__District@Changchun__64__64__true__-1483079698.png);polygon-pattern-file:url(SYMBOLFILL__District@Changchun__64__64__true__-1483079698.png);point-file:url(SYMBOLMARKER__District@Changchun__64__64__true__-1483079698.png);polygon-opacity:1;polygon-pattern-opacity:1;}
记录切片中的符号图片。
符号数据表的各值说明如表12所示。
表12 resource文件symbol数据表各值说明
字段名称 | 数据类型 | 描述 |
id |
Text |
符号的标识符。id是由符号类型、所在图层、图片宽高、是否透明以及Hashcode组成 |
format |
Text |
符号图片格式。如PNG |
symboldata |
blob |
符号图片 |
symbol符号数据库内容举例如图所示。