Osmbonuspack解析KML时如何获取KmlPlacemark的style属性?
在Osmbonuspack中获取KmlPlacemark的Style属性
我之前也在Osmbonuspack里折腾过KML样式的解析,刚好能帮到你!你说的kmlPlacemark.mStyle确实只是个字符串,它存的是Style的ID引用(比如#customLineStyle这种),不是直接的样式对象。要拿到实际的样式属性,得从解析KML的KmlDocument实例里去查找对应的Style,具体步骤如下:
1. 提取纯Style ID
首先把mStyle里的#符号去掉(如果有的话),拿到纯ID:
String styleId = kmlPlacemark.mStyle; if (styleId != null && styleId.startsWith("#")) { styleId = styleId.substring(1); }
2. 从KmlDocument中获取KmlStyle对象
KmlDocument内部维护了所有Style的集合,你可以用它的getStyle()方法直接通过ID获取对应的KmlStyle对象:
// 这里的kmlDocument是你用来解析KML的那个实例 KmlStyle kmlStyle = kmlDocument.getStyle(styleId);
3. 访问具体的样式属性
拿到KmlStyle后,就能获取各种细分样式了,比如:
- 图标样式:
kmlStyle.mIconStyle(控制标记点的图标、颜色等) - 线条样式:
kmlStyle.mLineStyle(控制路线的颜色、宽度等) - 多边形样式:
kmlStyle.mPolyStyle(控制区域填充色、透明度等) - 标签样式:
kmlStyle.mLabelStyle(控制文字标签的大小、颜色等)
举个实际用例,比如获取线条的颜色和宽度:
if (kmlStyle != null && kmlStyle.mLineStyle != null) { int lineColor = kmlStyle.mLineStyle.mColor; float lineWidth = kmlStyle.mLineStyle.mWidth; // 接下来就可以用这些值来设置地图Overlay的样式啦 }
额外提醒:处理StyleMap的情况
如果你的KML里用了StyleMap(也就是区分普通/高亮状态的样式组),那mStyle存的是StyleMap的ID。这时候得先获取KmlStyleMap,再根据状态拿到对应的Style ID:
KmlStyleMap styleMap = kmlDocument.getStyleMap(styleId); if (styleMap != null) { // 获取普通状态的Style String normalStyleId = styleMap.getNormalStyleId(); KmlStyle normalStyle = kmlDocument.getStyle(normalStyleId); // 获取高亮状态的Style(鼠标hover时的样式) String highlightStyleId = styleMap.getHighlightStyleId(); KmlStyle highlightStyle = kmlDocument.getStyle(highlightStyleId); }
记得每次都要先判断对象是否为空,避免空指针异常哦~
内容的提问来源于stack exchange,提问作者M. Usman Khan
相关产品推荐
相关产品推荐

