Android轨迹数据生成Kml文件

最近项目中用到了记录轨迹功能,我使用数据库将很多的轨迹点保存了起来,需要的时候直接从数据库中查找出来按照时间进行排序。因为涉及到了轨迹,所以我的这些轨迹点连接起来具体是个什么样的路线实在是看不出来。

这时候我是用了市面上的其他轨迹软件,例如:户外助手、奥维地图等。发现他们的软件可以加载Kml、Gpx文件。我选择使用KML文件。

下面是KML文件的介绍:

KML,是标记语言(Keyhole Markup Language)的缩写,最初由Keyhole公司开发,是一种基于XML 语法与格式的、用于描述和保存地理信息(如点、线、图像、多边形和模型等)的编码规范,可以被 Google Earth 和 Google Maps 识别并显示。Google Earth 和 Google Maps 处理 KML 文件的方式与网页浏览器处理 HTML 和 XML 文件的方式类似。像 HTML 一样,KML 使用包含名称、属性的标签(tag)来确定显示方式。因此,您可将 GoogleEarth和 Google Maps 视为 KML文件浏览器。2008年4月微软的OOXML成为国际标准后,Google公司宣布放弃对KML的控制权,由开放地理信息联盟(OGC)接管KML语言,并将“Google Earth”及“Google Maps”中使用的KML语言变成为一个国际标准。

关于KML文件的格式可以看一下这一位的博客:KML文件格式讲解

从户外助手导出的Kml文件里面包含的数据有很多,但是我认为有许多的数据,是户外助手自己生成自己解析获取的数据。对于我只要看到轨迹数据的需求来说,这些数据是不必要的。

一下截图是我对户外助手Kml文件数据的理解:

kml文件内容

这些对我并不是多么的重要,我不需要样式、名字或者其他什么的,下面的图才是我想要看到的:


重要内容

整条轨迹的数据都在这里。底下还有一堆数据,是轨迹点的时间:


轨迹时间点

从里面找出重要的节点属性:

<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>

这个就不用说什么了,因为Kml最终还是xml文件。

<kml></kml>这个就是kml文件的根级节点了。

<Document></Document>这个就比较熟了吧


内容介绍

有了这些属性节点基本上就够满足我的需求了。下面开始撸代码!!!!!!!

public static void createKml(String filePath, Task task) {

        Element root = DocumentHelper.createElement("kml"); //根节点是kml

        Document document = DocumentHelper.createDocument(root);

        document.setXMLEncoding("UTF-8"); //给根节点kml添加属性

        root.addNamespace("xmlns", "http://www.opengis.net/kml/2.2");

        root.addNamespace("gx", "http://www.google.com/kml/ext/2.2"); //给根节点kml添加子节点

        Document Element documentElement = root.addElement("Document");

        Element folderDe = documentElement.addElement("Folder");

        Element PlacemarkDe = folderDe.addElement("Placemark");

        Element styleE = PlacemarkDe.addElement("Style");

        Element LineStyle = styleE.addElement("LineStyle");

        LineStyle.addElement("color").addText("ed0000ff");

        LineStyle.addElement("width").addText("5");

        List tps = task.getTrackPoints();

        Element trackE = PlacemarkDe.addElement("gx:Track");

        for (TrackPoint tp : tps) {

                trackE.addElement("gx:coord").addText(tp.getLongitude() + " " + tp.getLatitude() + " " + tp.getAltitude());

                trackE.addElement("when").setText(DateUtils.specialDateString(tp.getTime()));

        } try {

                Writer fileWriter = new FileWriter(filePath); //换行

                OutputFormat format = new OutputFormat();

                format.setEncoding("UTF-8");

                format.setNewlines(true); // 生成缩进

                format.setIndent(true); //dom4j提供了专门写入文件的对象

                XMLWriter XMLWriter xmlWriter = new XMLWriter(fileWriter, format);

                xmlWriter.write(document); xmlWriter.flush();

                xmlWriter.close();

        } catch (IOException e) {

                e.printStackTrace();

        }

}

难点:

上面的代码这个位置:

root.addNamespace("gx", "http://www.google.com/kml/ext/2.2");

在之前我是这么写的:

root.addAttribute("gx", "http://www.opengis.net/kml/2.2");

结果报错了。报错地方是:

trackE.addElement("gx:coord").addText(tp.getLongitude() +""+tp.getLatitude() +" " + tp.getAltitude());

这里,提示非正常语法。网上的解决方法是添加gx命名空间。

我把设置addAttribute认为是添加命名空间,结果并不是。耽搁了一点时间,找到解决方法:addNamespace。

实体类Task是一条轨迹,TrackPoint是轨迹上的轨迹点。这里用到了dom4j包。这个包可以在网上自行查找。

就写到这这吧!!!!这特么格式是怎么调的,怎么看怎么不对劲,就这样吧。能看的就看,看不懂的......我也很绝望啊,可是我有什么办法!!!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352

推荐阅读更多精彩内容

  • 不是社会强奸了你。而是你被社会强奸了 区别在于。 一个是被动。 一个是活该。
    lan_8716阅读 94评论 0 0
  • 2.7:6 1-01 How many teeth: 这篇文章讲述了人们的牙齿的成长过程。从婴儿无牙齿到牙齿的长出...
    Pudding_6f91阅读 679评论 0 0