数据驱动样式设计
使用 Maps SDK 的数据驱动样式化功能来创建和显示多种类型的数据。您可以根据特定数据集中的信息实时动态地更改地图的外观和感觉。数据驱动的样式很大程度上建立在 sources 和 layers 的思想之上。
注意:Sources 和 layers 提供了灵活的选项来定制Mapbox地图的外观和地图上显示的数据。Android的Mapbox注释插件提供了一个简化的系统,用于与Mapbox映射层交互和定制Mapbox Map layers 。
1. Sources 源
源包含实际的数据和层引用源。这就是如何在Mapbox地图上显示数据。支持多种不同的源类型,选择正确的源类型取决于您的数据类型。添加源不会立即使数据出现在地图上,因为源不包含诸如颜色或宽度之类的样式细节。层引用一个源并给它一个可视化的表示。
使用一个源文件需要两个参数。源需要一个惟一的字符串ID并需要某种类型的数据。
Vector 矢量
VectorSource 块必须是 Mapbox 矢量块格式。所有使用矢量源的层都必须指定一个“源层”值。对于由 Mapbox 承载的向量块,URL值的形式应该是:Mapbox://mapid,例如:
// 添加一个矢量源层
VectorSource vectorSource = new VectorSource("vector-source", "mapbox://mapbox.mapbox-terrain-v2");
mapboxMap.getStyle().addSource(vectorSource);
Raster 栅格
如果 RasterSource 块是 TileJSON 格式的,可以将它们添加到map中。如果由Mapbox承载,URL值应该是形式:Mapbox://mapid,例如:
// 添加一个栅格源层
RasterSource rasterSource = new RasterSource("raster-source", "mapbox://mapbox.u8yyzaor");
mapboxMap.getStyle().addSource(rasterSource);
GeoJson
可以通过几种不同的方式添加 GeoJsonSource。您可以提供一个指向在线托管的 GeoJSON 原始数据的URL,提供一个指向本地托管在应用程序的assets文件夹中的 GeoJSON 文件的链接,或者您可以在代码中直接构建自己的 GeoJSON 特征集合(FeatureCollection)。下面的代码片段展示了向地图添加 GeoJSON 源的不同方法。
(1)从URL添加一个GeoJSON源
try {
URL geoJsonUrl = new URL("https://url-to-geojson-file.geojson");
GeoJsonSource geoJsonSource = new GeoJsonSource("geojson-source", geoJsonUrl);
mapboxMap.getStyle().addSource(geoJsonSource);
} catch (MalformedURLException exception) {
Log.d(TAG, exception);
}
(2)加载本地存储的GeoJSON文件。要么使用下面找到的loadJsonFromAsset()方法,要么使用自己喜欢的方式加载JSON文件
private String loadJsonFromAsset(String nameOfLocalFile) throws IOException {
InputStream is = getAssets().open(本地存储的GeoJSON文件名);
int size = is.available();
byte[] buffer = new byte[size];
is.read(buffer);
is.close();
return new String(buffe