全部服务产品
开发者频道
定价
登录
附录
下载开发文档

自iOS地图SDK V5.3.0(包含)版本之后,个性化地图仅支持.sty格式的样式文件。如仍需使用JSON格式,请根据本文编辑JSON代码。

实现个性化地图

V5.0.0之前的版本:

//个性化地图模板文件路径
NSString *path = [[NSBundle mainBundle] pathForResource:@"custom_map_config" ofType:@"json"];
//设置个性化地图样式
[BMKMapView customMapStyle:path];

打开个性化地图方法如下:

//打开个性化地图
[BMKMapView enableCustomMapStyle:YES];

关闭个性化地图方法如下:

///关闭个性化地图
[BMKMapView enableCustomMapStyle:NO];

V5.0.0及之后的版本:

a、本地离线样式加载方式,关键代码如下1、2两步:

//1.设置本地个性化地图样式
NSString *path = [[NSBundle mainBundle] pathForResource:@"custom_map_config" ofType:@"json"];
//设置个性化地图样式
[self.mapView setCustomMapStylePath:path];
[self.mapView setCustomMapStyleEnable:YES];

打开个性化地图方法如下:

//2.打开个性化地图样式
[self.mapView setCustomMapStyleEnable:YES];

b、通过样式id在线方式加载,关键代码如下1、2两步:

//1.设置在线个性化地图样式
BMKCustomMapStyleOption *option = [[BMKCustomMapStyleOption alloc] init];
//请输入您的在线个性化样式ID
option.customMapStyleID = @"4e7360bde67c***d6e69bc6a2c53059c";
//获取本地个性化地图模板文件路径
NSString *path = [[NSBundle mainBundle] pathForResource:@"custom_map_config" ofType:@"json"];
//在线样式ID加载失败后会加载此路径的文件
option.customMapStyleFilePath = path;
[self.mapView setCustomMapStyleWithOption:option preLoad:^(NSString *path) {
NSLog(@"预加载个性化文件路径:%@",path);
} success:^(NSString *path) {
NSLog(@"在线个性化文件路径:%@",path);
} failure:^(NSError *error, NSString *path) {
NSLog(@"设置在线个性化地图失败:%@---%@",error.userInfo,path);
}];

打开个性化地图方法如下:

//2.打开个性化地图样式
[self.mapView setCustomMapStyleEnable:YES];
配置个性化地图样式

支持修改的元素类型和包容关系

以 highway 地图元素为例

元素类型elementType
元素代码featureType形状边框颜色形状填充颜色文字边框颜色文字填充颜色icon可见性
highwaygeometry.strokegeometry.filllabels.text.strokelabels.text.filllabels.icon
元素代码featureType形状[边框]和[填充]颜色文字[边框]和[填充]颜色
highwaygeometrylabels.text

设置highway的道路边框和填充 为同一颜色时,既可以分别设置geometry.stroke和geometry.fill,也可以一起设置geometry 某一元素的多样式同级别配置策略(待确定)

自V4.1.1起,由于涉及到样式在不同缩放级别的控制生效,针对可见性(visibility),颜色(color),宽度(weight)等样式的生效策略做了调整。当同一元素的可见性(visibility)、颜色(color)、宽度(weight)一起设置时,以最后设置的样式生效; 示例如下:首先将地图元素(水系)的颜色属性配置为绿色,然后又配置了visibility属性为off。则此时water元素将以后面一个配置生效,不会显示绿色。

{
"featureType":"water",
"elementType":"all",
"stylers":{
"color":"#00ff00ff"
}
},
{
"featureType":"water",
"elementType":"all",
"stylers":{
"visibility":"off"
}
}

设置颜色样式

在个性化地图的配置文件custom_configdir.json中,添加如下json串,可设置不同的背景颜色。

示例如下:配置后,地图上所有的水系元素都会展示为绿色。

{
"featureType":"water",
"elementType":"all",
"stylers":{
"color":"#00ff00ff"
}
}

设置分级别控制元素生效

自V4.1.1起不同的地图缩放级别支持呈现不同的自定义样式,Json样式stylers中的"level"字段,用来控制样式的生效级别。 指定级别生效原则:

1.该字段的值在Json样式中以字符串表现,取值对标普通地图的缩放级别范围[4-21]。BaiduMap SDK 定义缩放级别和比例尺的关系参考显示地图

2.如果stylers中不配置"level"字段,则该样式在所有地图缩放级别生效;

3.如果Json样式,存在未指定缩放级别样式1和已指定生效的缩放级别样式2的同一元素,则在指定的缩放级别展示样式2,在其他缩放级别展示样式1;

示例如下:高速公路的样式会在11级别显示为蓝色,其他级别显示默认的颜色。

{
"featureType":"highway",
"elementType":"geometry.fill",
"stylers":{
"color":"#0000ffff",
"level":"11",
}
}

设置宽度样式

自V4.1.1起,Json样式的stylers新增weight字段支持点、线元素的宽度配置,比如点元素(poi类元素,字体),线元素(如高速,地铁等)。

宽度配置生效原则:

1.该字段的值在Json样式中以字符串表现,取值范围为[0, 255]。

2.如果不设置该字段,则以默认样式宽度展示。

示例如下:告诉公路显示的宽度为20。

{
"featureType":"highway",
"elementType":"geometry.fill",
"stylers":{
"weight":"20"
}
}

设置透明度样式

自V4.1.1起,增加透明度样式,适用所有可以设置颜色的元素属性,通过“color”字段赋值,格式如下:

颜色格式:#RRGGBBAA ,R:Red、G:Green、B:Blue、 A:Alpha。注意:透明度顺序与路况图颜色的透明度顺序不一致。

如设置为人造区域的形状为黄色,且透明度为0x78 ,其中AA为透明度;透明度AA可以设置为0x00,即完全透明。

{
"featureType": "manmade",
"elementType": "geometry",
"stylers": {
"color": "#ffff0078"
//color的格式为 #RRGGBBAA
}
}

透明度生效原则

1.当前版本透明度不支持单独设置,与颜色样式一起设置。

2.该字段的值使用十六进制,范围为:[0x00, 0xff],默认值为0xff,即不透明。

3.为兼容以前的颜色样式,SDK旧版本的样式值将自动补齐透明度值,默认0xff,即不透明。

示例如下:配置后,所有的高速公路显示的颜色为是,透明度为0x0f的蓝色样式。

{
"featureType":"highway",
"elementType":"geometry.fill",
"stylers":{
"color":"#0000ff0f"
}
}
支持修改的地图元素

注意:版本支持是V3.4.2表示V3.4.2及以上版本新增属性,版本支持是V4.1.1表示V4.1.1及以上版本新增属性,V3.4.2以下版本更换版本后,请先验证显示效果。

地图元素元素代码形状边框颜色形状填充颜色文字边框颜色文字填充颜色icon可见性颜色可见性颜色透明度备注版本支持
全部allV3.4.2
陆地landV3.3.2
水系water
绿地green
人造区域manmade
人造区域之地铁区域subwaystationV3.4.2
人造区域之教育区域education
人造区域之医疗区域medical
人造区域之景点区域scenicspots
人造区域之地产小区区域estateV4.1.1
人造区域之购物区域shopping
人造区域之交通设施区域transportation
建筑物buildingV3.3.2
高速及国道highway
城市主路arterial
普通道路local
国道nationalwayV4.2.0
省道provincialway
城市快速路cityhighway
三级道路tertiaryway
四级道路fourlevelway
景区内部道路scenicspotsway
高校内部道路universityway
度假地内部道路vacationway
铁路railwayV3.3.2
地铁subway
行政区边界boundary
行政区化districtlabel
全部POI标注(V3.4.2起不再去除行政区文字)poilabel
行政区划之大洲continentV3.4.2
行政区划之国家country
行政区划之省province
行政区划之城市city
行政区划之区县district
行政区划之乡镇town
机场标注airportlabel
旅游景点标注scenicspotslabel
教育标注educationlabel
医疗标注medicallabel
房产小区标注estatelabelV4.1.1
商务大厦标注businesstowerlabel
公司企业标注companylabel
政府机构标注governmentlabel
餐饮类标注restaurantlabel
宾馆类标注hotellabel
购物类标注shoppinglabel
生活服务类标注lifeservicelabel
汽车服务类标注carservicelabel
交通设施类标注transportationlabel
金融类标注financelabel
其它类标注otherlabel

上一篇

常见问题

本篇文章对您是否有帮助?