矢量图层功能主要由MvtOverlayParams、addMvtOverlay和MvtOverlay提供,更多接口及使用方法请参见接口文档。
| 接口名 | 描述 |
|---|---|
| MvtOverlayParams | 矢量图层的参数。 |
| addMvtOverlay(params: mapCommon.MvtOverlayParams): MvtOverlay | 添加矢量图层。 |
| MvtOverlay | 矢量图层管理对象,支持添加和删除图层。 |
在开发过程中,开发者需要在应用的module.json5文件中配置网络访问权限以支持在线下载矢量图层。具体操作如下:打开module.json5文件,在requestPermissions数组中添加如下配置项:允许应用使用Internet网络。
{
"module": {
// ...
// ...
"requestPermissions":[
{
// 允许应用在前台运行时获取位置信息
"name" : "ohos.permission.LOCATION",
// reason需要在/resources/base/element/string.json中新建
"reason": "$string:location_permission",
"usedScene": {
"abilities": [
"EntryAbility"
],
"when":"inuse"
}
},
{
// 允许应用获取设备模糊位置信息
"name" : "ohos.permission.APPROXIMATELY_LOCATION",
// reason需要在/resources/base/element/string.json中新建
"reason": "$string:fuzzy_location_permission",
"usedScene": {
"abilities": [
"EntryAbility"
],
"when":"inuse"
}
}
]
}
} 导入相关模块。
import { mapCommon, map, MapComponent } from '@kit.MapKit';
import { AsyncCallback } from '@kit.BasicServicesKit'; 绘制矢量图层。
矢量图层支持的数据源类型为通用矢量瓦片格式(PBF/MVT)。MvtOverlayParams类中的layers参数,其中sourceLayer、fillColor/fillOpacity默认值从矢量数据里获取,也可自己设置。
@Entry
@Component
struct MapMvtOverlayDemo {
// ...
private TAG = 'OHMapSDK_MvtOverlayDemo';
private mapOptions?: mapCommon.MapOptions;
private mapController?: map.MapComponentController;
private callback?: AsyncCallback<map.MapComponentController>;
aboutToAppear(): void {
this.mapOptions = {
position: {
target: {
latitude: 35.899780,
longitude: 107.766172
},
zoom: 6
},
scaleControlsEnabled: true
}
this.callback = async (err, mapController) => {
if (!err) {
this.mapController = mapController;
let params: mapCommon.MvtOverlayParams = {
source: {
// 设置矢量图层的地址,必须是以http或者https开头的URL且包含占位符{x}、{y}和{z}
tileUrl: 'http://xxx/tiles/{z}/{x}/{y}.pbf',
minZoom: 2,
maxZoom: 15
},
layers: [{
id: 'layer-map',
type: mapCommon.MvtLayerType.FILL,
// 对应矢量图层数据中图层的name字段
sourceLayer: 'XX',
paint: {
fillColor: {
operator: mapCommon.Operator.GET,
args: 'fill'
},
fillOpacity: {
operator: mapCommon.Operator.GET,
args: 'fill-opacity'
}
}
}]
}
try {
this.mapController?.addMvtOverlay(params);
} catch (e) {
console.error(this.TAG, `code:${e.code}, message:${e.message}`);
}
} else {
console.error(`Failed to initialize the map, code is:${err.code}, message is ${err.message}`);
}
}
}
build() {
// ...
Stack() {
Column() {
MapComponent({ mapOptions: this.mapOptions, mapCallback: this.callback });
}.width('100%')
}.height('100%')
// ...
}
} 导入相关模块。
import { mapCommon, map, MapComponent } from '@kit.MapKit';
import { AsyncCallback } from '@kit.BasicServicesKit'; 增加本地矢量图层。
@Entry
@Component
struct MapMvtOverlayDemo {
// ...
private TAG = 'OHMapSDK_MvtOverlayDemo';
private mapOptions?: mapCommon.MapOptions;
private mapController?: map.MapComponentController;
private callback?: AsyncCallback<map.MapComponentController>;
aboutToAppear(): void {
this.mapOptions = {
position: {
target: {
latitude: 35.899780,
longitude: 107.766172
},
zoom: 6
},
scaleControlsEnabled: true
}
this.callback = async (err, mapController) => {
if (!err) {
this.mapController = mapController;
let params: mapCommon.MvtOverlayParams = {
source: {
// 根据矢量坐标获取矢量图层,本地获取矢量图层方式需开发者自行实现tileProvider方法
tileProvider: this.tileProviderMethod,
minZoom: 2,
maxZoom: 15
},
layers: [{
id: 'layer-map',
type: mapCommon.MvtLayerType.FILL,
// 对应矢量图层数据中图层的name字段
sourceLayer: 'XX',
paint: {
fillColor: {
operator: mapCommon.Operator.GET,
args: 'fill'
},
fillOpacity: {
operator: mapCommon.Operator.GET,
args: 'fill-opacity'
}
}
}]
}
try {
this.mapController?.addMvtOverlay(params);
} catch (e) {
console.error(this.TAG, `code:${e.code}, message:${e.message}`);
}
} else {
console.error(`Failed to initialize the map, code is:${err.code}, message is ${err.message}`);
}
}
}
// 需要开发者自行实现tileProviderMethod方法,负责加载本地项目中的矢量图层资源
private tileProviderMethod(x: number, y: number, z: number): Promise<ArrayBuffer> {
return new Promise((resolve, reject) => {
});
}
build() {
// ...
Stack() {
Column() {
MapComponent({ mapOptions: this.mapOptions, mapCallback: this.callback });
}.width('100%')
}.height('100%')
// ...
}
}