Android ArcGIS自定义解析KML实现地图加载
ArcGIS for Android 是一款强大的地理信息系统 (GIS) 应用开发工具,特别适用于在Android平台实现地理数据处理和可视化。在这个特定的示例中,开发者针对Android Studio环境编写了一个自定义函数 `parseByPULL`,用于解析本地KML (Keyhole Markup Language) 文件,并在地图上加载其中的要素。由于ArcGIS for Android的一些基础功能需要付费订阅,开发者决定自己实现解析功能以避免服务成本。 KML是一种XML格式,用于存储地理位置、几何形状和附加信息。`parseByPULL`方法通过`XmlPullParser`库来逐行解析KML文件。首先,它创建一个`XmlPullParser`实例,然后从本地文件路径读取文件内容,设置编码为UTF-8。在解析过程中,它通过`START_TAG`事件来识别不同的KML元素,如`Placemark`、`IconStyle`、`LabelStyle`、`LineStyle`等。 遇到`Placemark`标签时,开发者会创建一个新的`kmlPlaceMarkInfo`对象,并将`isMulti`标志初始化为0,表示单个地理特征。对于每个标签,如`name`(存储名称)、`IconStyle`(图标样式)、`Point`(点)、`Line`(线)或`Polygon`(多边形),根据标签名判断类型并设置相应的变量值。例如,当遇到`IconStyle`标签时,会检查其子元素以决定是哪种样式(ICONSTYLE、LABELSTYLE、LINESTYLE、TRACKSTYLE或POLYSTYLE)。 通过这种方式,开发者能够提取KML文件中的关键信息,如名称、图标、几何图形等,然后将这些信息与地图进行关联,展示在用户的Android设备上。这不仅节省了对ArcGIS付费服务的需求,还提供了定制化的KML数据处理能力,适合那些需要频繁操作KML文件并在地图上显示的开发者和应用程序。这是一个实用且灵活的解决方案,有助于提高Android GIS应用的自定义性和性能。
private void parseByPULL(String local_file_path){
new Thread() {
public void run() {
try {
kmlPlaceMarkInfo info = null;
final int ICONSTYLE = 1;
final int LABELSTYLE = 2;
final int LINESTYLE = 3;
final int TRACKSTYLE = 4;
final int POLYSTYLE = 5;
int StyleFlag = 0;
final int POINT = 1;
final int LINE = 2;
final int POLYGON = 3;
int markType = 0;
int isMulti = 0;
File file = new File(local_file_path);
InputStream inputStream = new FileInputStream(file);
//创建XmlPullParser
XmlPullParser parser= Xml.newPullParser();
//解析文件输入流
parser.setInput(inputStream,"UTF-8");
//得到当前的解析对象
int eventType=parser.getEventType();
while (eventType!=XmlPullParser.END_DOCUMENT){
//int a = parser.getLineNumber();
switch (eventType){
//解析开始的时候初始化list
//获得解析器当前指向的元素的名字
case XmlPullParser.START_TAG:
String XPPname=parser.getName();
if ("Placemark".equals(XPPname)){
info = new kmlPlaceMarkInfo();
isMulti = 0;
break;
}
if (info!=null) {
if ("name".equals(XPPname)) { info.setName(parser.nextText());break; }
if ("IconStyle".equals(XPPname)) { StyleFlag = ICONSTYLE;break; }
if ("LabelStyle".equals(XPPname)) { StyleFlag = LABELSTYLE;break; }
if ("LineStyle".equals(XPPname)) { StyleFlag = LINESTYLE;break; }
if ("TrackStyle".equals(XPPname)) { StyleFlag = TRACKSTYLE;break; }
if ("PolyStyle".equals(XPPname)) { StyleFlag = POLYSTYLE;break; }
if ("color".equals(XPPname)) {
switch (StyleFlag) {
case ICONSTYLE: { info.setIconStyle_color(parser.nextText());break; }
case LABELSTYLE: { info.setLabelStyle_color(parser.nextText());break; }
case LINESTYLE: { info.setLineStyle_color(parser.nextText());break; }
case POLYSTYLE: { info.setPolyStyle_color(parser.nextText());break; }
}
break;
}
if ("scale".equals(XPPname)) { info.setIconStyle_scale(parser.nextText());break;
}
剩余8页未读,继续阅读
- 粉丝: 12
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 李兴华Java基础教程:从入门到精通
- U盘与硬盘启动安装教程:从菜鸟到专家
- C++面试宝典:动态内存管理与继承解析
- C++ STL源码深度解析:专家级剖析与关键技术
- C/C++调用DOS命令实战指南
- 神经网络补偿的多传感器航迹融合技术
- GIS中的大地坐标系与椭球体解析
- 海思Hi3515 H.264编解码处理器用户手册
- Oracle基础练习题与解答
- 谷歌地球3D建筑筛选新流程详解
- CFO与CIO携手:数据管理与企业增值的战略
- Eclipse IDE基础教程:从入门到精通
- Shell脚本专家宝典:全面学习与资源指南
- Tomcat安装指南:附带JDK配置步骤
- NA3003A电子水准仪数据格式解析与转换研究
- 自动化专业英语词汇精华:必备术语集锦