找回密码
 立即注册
首页 业界区 业界 探索自定义地图样式,打造应用专属个性化地图 ...

探索自定义地图样式,打造应用专属个性化地图

唯棉坜 前天 10:16
不同应用的开发者对地图样式的展示需求差异很大。例如,物流类应用希望地图样式简洁一些,重点突出城市分布和快递路径;AR游戏类应用中的地图色彩需要和游戏UI适配,做的更酷炫一些;景区导览应用中的地图样式要景区特色相结合,重点呈现关键景点。
这就要求地图样式为开发者提供多种地图样式供选择,包括简洁风格、酷炫风格、特色风格等,让开发者可以根据自己的需求自定义地图样式,包括颜色、标注、线条等元素,以实现更加个性化的展示效果,以满足不同应用的需求。
HarmonyOS SDK地图服务(Map Kit)提供了自定义地图样式的能力,开发者可使用Petal Maps Studio管理地图样式或者通过传入自定义JSON更改地图样式。提供八大类,上百种地图元素的样式编辑,让开发者自由编辑个性化地图。同时,开发者只需编辑一次,地图即可适用于多种终端,极大的提高了开发效率。
1.png

开发步骤

Map Kit提供两种方法设置自定义地图样式:
• 设置样式ID:使用Petal Maps Studio管理地图样式,并使用样式ID将它们链接到您的地图上。您可以在Petal Maps Studio上创建新样式,或导入现有样式定义。样式一旦发布,使用此样式的应用都会自动应用新样式。
• 设置样式内容:通过传入自定义JSON更改地图样式,JSON的定义参见样式参考。
设置样式ID


  • 导入相关模块。
    import { MapComponent, mapCommon, map } from '@kit.MapKit';
    import { AsyncCallback } from '@kit.BasicServicesKit';
  • 创建样式ID。
a. 登录Petal Maps Studio。
2.png

b. 点击"Create map"创建自定义样式。
3.png

c. 导入JSON样式文件,点击"Import"。
4.png

d. 在编辑器里修改样式。
5.png

e. 点击"SAVE"生成预览ID,预览ID在编辑样式时会重新生成,您可以通过预览ID测试样式效果。点击"UBLISH"发布生成样式ID,样式ID是唯一ID,一旦发布生效不会变化。
6.png



  • Map Kit提供两种方法设置样式ID:
• 在创建地图后设置样式ID
  1. @Entry
  2. @Component
  3. struct CustomMapStyleDemo {
  4.   private mapOptions?: mapCommon.MapOptions;
  5.   private mapController?: map.MapComponentController;
  6.   private callback?: AsyncCallback<map.MapComponentController>;
  7.   aboutToAppear(): void {
  8.     // 地图初始化参数
  9.     this.mapOptions = {
  10.       position: {
  11.         target: {
  12.           latitude: 31.984410259206815,
  13.           longitude: 118.76625379397866
  14.         },
  15.         zoom: 15
  16.       }
  17.     };
  18.     this.callback = async (err, mapController) => {
  19.       if (!err) {
  20.         this.mapController = mapController;
  21.         // 自定义样式参数,styleId需要替换为您自己的样式ID或者预览ID,样式ID或者预览ID可在Petal Maps Studio平台上创建
  22.         let param: mapCommon.CustomMapStyleOptions = {
  23.            styleId: "1346407266336828736"
  24.         };
  25.         // 设置自定义样式
  26.         await this.mapController.setCustomMapStyle(param);
  27.       }
  28.     };
  29.   }
  30.   build() {
  31.     Stack() {
  32.       Column() {
  33.         MapComponent({ mapOptions: this.mapOptions, mapCallback: this.callback });
  34.       }.width('100%')
  35.     }.height('100%')
  36.   }
  37. }
复制代码
• 在初始化地图时设置样式ID
  1. @Entry
  2. @Component
  3. struct CustomMapStyleDemo {
  4.   private mapOptions?: mapCommon.MapOptions;
  5.   private mapController?: map.MapComponentController;
  6.   private callback?: AsyncCallback<map.MapComponentController>;
  7.   aboutToAppear(): void {
  8.     // 地图初始化参数
  9.     this.mapOptions = {
  10.       position: {
  11.         target: {
  12.           latitude: 31.984410259206815,
  13.           longitude: 118.76625379397866
  14.         },
  15.         zoom: 15
  16.       },
  17.       // 自定义样式参数,styleId需要替换为您自己的样式ID或者预览ID,样式ID或者预览ID可在Petal Maps Studio平台上创建
  18.       styleId: "1346407266336828736"
  19.     };
  20.     this.callback = async (err, mapController) => {
  21.       if (!err) {
  22.         this.mapController = mapController;
  23.       }
  24.     };
  25.   }
  26.   build() {
  27.     Stack() {
  28.       Column() {
  29.         MapComponent({ mapOptions: this.mapOptions, mapCallback: this.callback });
  30.       }.width('100%')
  31.     }.height('100%')
  32.   }
  33. }
复制代码
设置样式ID之后效果如下:
8.png

设置样式内容

  • 导入相关模块。
  1. import { MapComponent, mapCommon, map } from '@kit.MapKit';
  2. import { AsyncCallback } from '@kit.BasicServicesKit';
复制代码

  • 设置样式内容。
  1. @Entry
  2. @Component
  3. struct CustomMapStyleDemo {
  4.   private mapOptions?: mapCommon.MapOptions;
  5.   private mapController?: map.MapComponentController;
  6.   private callback?: AsyncCallback<map.MapComponentController>;
  7.   aboutToAppear(): void {
  8.     // 地图初始化参数
  9.     this.mapOptions = {
  10.       position: {
  11.         target: {
  12.           latitude: 31.984410259206815,
  13.           longitude: 118.76625379397866
  14.         },
  15.         zoom: 15
  16.       }
  17.     };
  18.     this.callback = async (err, mapController) => {
  19.       if (!err) {
  20.         this.mapController = mapController;
  21.         // 自定义样式参数
  22.         let param: mapCommon.CustomMapStyleOptions = {
  23.                styleContent: `[{
  24.                    "mapFeature": "landcover.natural",
  25.                    "options": "geometry.fill",
  26.                    "paint": {
  27.                        "color": "#8FBC8F"
  28.                    }},
  29.                    {
  30.                   "mapFeature": "water",
  31.                   "options": "geometry.fill",
  32.                   "paint": {
  33.                       "color": "#4682B4"
  34.                   }}]`
  35.         };
  36.         // 设置自定义样式
  37.         await this.mapController.setCustomMapStyle(param);
  38.       }
  39.     };
  40.   }
  41.   build() {
  42.     Stack() {
  43.       Column() {
  44.         MapComponent({ mapOptions: this.mapOptions, mapCallback: this.callback });
  45.       }.width('100%')
  46.     }.height('100%')
  47.   }
  48. }
复制代码
9.png

了解更多详情>>
访问地图服务联盟官网
获取自定义地图样式开发指导文档

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册