Mapbox之栅格矢量瓦片

1. 瓦片(Tile)介绍

地图瓦片(Tile)分为两种,栅格瓦片矢量瓦片,瓦片就是一块一块的正方形格子,按一定的顺序拼在一起便能看到全球的内容或者某一片区域的内容。

栅格瓦片:每一块都是图片,可以是.png,也可以是.jpg。常见的大小有256*256512*512

矢量瓦片:每一块都是由点、线、面构造的矢量数据,mapbox的示例中有一个.mvt的道路瓦片https://d25uarhxywzl1j.cloudfront.net/v0.1/{z}/{x}/{y}.mvt。矢量瓦片的大小不确定。

2. 栅格瓦片的加载

栅格瓦片的Source为:RasterSource
栅格瓦片的Layer(也就是渲染效果)为:RasterLayer

RasterSource的构造可以是直接由瓦片链接构造,也可以由TileSet对象构造。

2.1 由瓦片链接"mapbox://mapbox.u8yyzaor"构造
RasterSource source = new RasterSource("chicago-source", "mapbox://mapbox.u8yyzaor", 512);
mapboxMap.getStyle().addSource(source);
2.2 由TileSet构造,链接中要有{z}/{x}/{y}
TileSet tileSet = new TileSet("tileset", new String[]{"https://img.nj.gov/imagerywms/Natural2015?bbox={"
                + "bbox-epsg-3857}&format=image/png&service=WMS&version=1.1.1&request=GetMap&srs=EPSG:"
                + "3857&transparent=true&width=256&height=256&layers=Natural2015"});
tileSet.setMinZoom(0);
tileSet.setMaxZoom(14);
RasterSource source1 = new RasterSource("web-map-source", tileSet, 256);
mapboxMap.getStyle().addSource(source1);

构造好RasterSource后便可添加对应的RasterLayer:

// 对应由瓦片链接构造的RasterSource
RasterLayer layer = new RasterLayer("chicago", "chicago-source");
mapboxMap.getStyle().addLayer(layer);

// 对应由TileSet构造的RasterSource
RasterLayer layer1 = new RasterLayer("web-map-layer", "web-map-source");
mapboxMap.getStyle().addLayer(layer1);

3. 矢量瓦片的加载

矢量瓦片的Source为:VectorSource
矢量瓦片的Layer(也就是渲染效果)可以是点线面对应的所有Layer:

渲染的矢量数据类型渲染效果
SymbolLayer、CircleLayer
线LineLayer
FillLayer

VectorSource的构造和RasterSource一样,可以直接由瓦片链接构造,也可以由TileSet对象构造。但是它的构造方法不能传入瓦片的大小,至于为什么就不清楚了。

3.1 由瓦片链接构造
VectorSource source = new VectorSource("states", "mapbox://mapbox.us_census_states_2015");
mapboxMap.getStyle().addSource(source);
3.2 由TileSet构造,链接中要有{z}/{x}/{y}
TileSet mapillaryTileset = new TileSet("2.1.0", "https://d25uarhxywzl1j.cloudfront.net/v0.1/{z}/{x}/{y}.mvt");
mapillaryTileset.setMinZoom(0);
mapillaryTileset.setMaxZoom(14);
VectorSource source1 = new VectorSource("mapillary.source", mapillaryTileset);
mapboxMap.getStyle().addSource(source1);

构造好VectorSource后便可添加对应的渲染层,这里要尤为注意渲染层使用哪种由setSourceLayer中的数据决定:

// 对应由瓦片链接构造的VectorSource
FillLayer statesJoinLayer = new FillLayer("states-join", "states");
statesJoinLayer.setSourceLayer("states"); // 参数值由数据决定,并不是一定和source的id相同
statesJoinLayer.withProperties(
      fillColor(match(toNumber(get("STATE_ID")),
        rgba(0, 0, 0, 1), stops))
);
mapboxMap.getStyle().addLayer(statesJoinLayer);

// 对应由TileSet构造的VectorSource
LineLayer lineLayer = new LineLayer("mapillary.layer.line", "mapillary.source");
lineLayer.setSourceLayer("mapillary-sequences"); // 参数值由数据决定,并不是一定和source的id相同
lineLayer.setProperties(
        lineCap(Property.LINE_CAP_ROUND),
        lineJoin(Property.LINE_JOIN_ROUND),
        lineOpacity(0.6f),
        lineWidth(2.0f),
        lineColor(Color.GREEN)
);
mapboxMap.getStyle().addLayer(lineLayer);
Cesium是一个基于WebGL的3D地图引擎,可以加载各种类型的地理数据。要加载Mapbox矢量瓦片,您可以按照以下步骤进行操作: 1. 获取Mapbox矢量瓦片的URL。您可以在Mapbox Studio中创建和发布矢量瓦片,然后获取其URL。 2. 创建一个Cesium的ImageryProvider对象。您可以使用Cesium的UrlTemplateImageryProvider类来实现这一点,该类可以从一个URL模板加载图像数据。例如: ```javascript var imageryProvider = new Cesium.UrlTemplateImageryProvider({ url: 'https://api.mapbox.com/styles/v1/{username}/{style_id}/tiles/256/{z}/{x}/{y}?access_token={access_token}', credit: 'Mapbox', minimumLevel: 0, maximumLevel: 22, subdomains: ['a', 'b', 'c'], tilingScheme: new Cesium.WebMercatorTilingScheme(), rectangle: Cesium.Rectangle.fromDegrees(-180.0, -85.06, 180.0, 85.06), customTags: { username: 'mapbox', style_id: 'styleid', access_token: 'your_access_token' } }); ``` 在上面的代码中,您需要将URL模板替换为您的Mapbox矢量瓦片的URL,以及您的Mapbox用户名、样式ID和访问令牌。 3. 创建一个Cesium的ImageryLayer图像图层对象,并将ImageryProvider对象作为参数传递给它。例如: ```javascript var imageryLayer = new Cesium.ImageryLayer(imageryProvider); ``` 4. 将ImageryLayer对象添加到Cesium的Viewer视图器中,以便在地图上显示它。例如: ```javascript viewer.imageryLayers.add(imageryLayer); ``` 通过上述步骤,您就可以将Mapbox矢量瓦片加载到Cesium中,实现在3D地图上显示矢量数据的效果。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值