只要做地图相关的朋友,都会遇到一个功能,那就是显示点位以及轨迹回放,如果需要方便的查看轨迹回放以及点位的位置,我们可以借助Google Earth工具,当然使用的前提你得准备KML文件。

Google Earth下载地址:Google Earth_官方电脑版 _华军纯净下载

KML:KML文件就是一种在GOOGLE地图浏览器中用于交换地理数据的文件。它基于XML,并定义了一些TAG用于规定地理数据的显示方式。KML可用于定义的地理特征包括地点、描述、叠层、路径和多边形等。KML的用途主要有:

(1)指定地点的图标和注记;

(2)为每一个地理特征创建不同的视角位置;

(3)在地球上叠放图像;

(4)指定地理特征显示的样式;

(5)编写地理特征的HTML描述,包括超链接和内嵌图像;

(6)使用文件夹对地理特征进行群组;

(7)KML文件的动态获取及修改;

(8)显示三维地物;

kml相关的一些参数说明详见KML参数标签介绍_浪克oo的博客-CSDN博客_kml标签

kml一般来说是由两个文件组成,一个kml文件和一个png图标文件。但是我一般只用一个kml文件就行了,图标我使用的是在线图标。

下面我们就举一个例子来说明java怎样生成kml文件。

最终在Google Earth中效果图如下:

图中包含蓝色的图标以及黄色的路径。

首先我们需要生成一个包含位置信息的kml文件(类似xml文件),有多种方式创建kml,这里使用的是Dom4J方式。android中就导入jar包下载地址:dom4j,java中就在pom.xml文件中添加如下。


<dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId><version>1.6.1</version></dependency>

使用如下(懒,直接上代码,注解配合参数说明介绍很详细):

//travelRecords代表一个地理信息的对象集合(自定义)  生成kml的名称public static boolean setTravelsKml(List<TravelRecord> travelRecords,String fileName) throws IOException {Element root = DocumentHelper.createElement("kml"); Document document = DocumentHelper.createDocument(root);  //根节点添加属性  root.addAttribute("xmlns", "http://www.opengis.net/kml/2.2").addAttribute("xmlns:gx", "http://www.google.com/kml/ext/2.2").addAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance").addAttribute("xsi:schemaLocation", "http://www.opengis.net/kml/2.2 http://schemas.opengis.net/kml/2.2.0/ogckml22.xsd http://www.google.com/kml/ext/2.2 http://code.google.com/apis/kml/schema/kml22gx.xsd");  Element documentElement = root.addElement("Document");  documentElement.addElement("name").addText(fileName); documentElement.addElement("Snippet").addText(""); Element folderElement = documentElement.addElement("Folder");//添加一个目录folderElement.addAttribute("id", "FeatureLayer0");folderElement.addElement("name").addText("轨迹点位"); //名称folderElement.addElement("Snippet").addText(""); //显示在Google Earth之中的对description的简短概要.//生成点位图标数据int i = 0;for (TravelRecord travelRecord:travelRecords) {i++;Element placeMarkElement = folderElement.addElement("Placemark");//在文件夹中添加一个地标placeMarkElement.addAttribute("id", String.valueOf(i));placeMarkElement.addElement("name").addText("点位"+String.valueOf(i)); placeMarkElement.addElement("Snippet").addText("");placeMarkElement.addElement("description").addText("");//简介placeMarkElement.addElement("styleUrl").addText("#MyStyle");//风格Element pointElement = placeMarkElement.addElement("Point");pointElement.addElement("altitudeMode").addText("clampToGround");//添加点位的经纬度坐标以及高度(显示时绘制高度m)pointElement.addElement("coordinates").addText(travelRecord.lng+","+travelRecord.lat+",0");//可以是是任何几何形状的子元素,定义每一个点的经度、纬度和高度(按照严格的顺序). 多个点使用空格隔开,经纬度按照WGS84标准.}//生成轨迹线路径数据Element lineElement = documentElement.addElement("Placemark");//在文件夹外添加一个地标lineElement.addElement("name").addText("轨迹线"); lineElement.addElement("description").addText("");lineElement.addElement("styleUrl").addText("#MyStyle");Element pointElement = lineElement.addElement("LineString");pointElement.addElement("altitudeMode").addText("absolute");pointElement.addElement("extrude").addText("1");pointElement.addElement("tessellate").addText("1");String linedata="";//每个坐标以及高度用换行符或空格分开for (TravelRecord travelRecord:travelRecords) {linedata =linedata+"\n"+ travelRecord.lng+","+travelRecord.lat+",30";}pointElement.addElement("coordinates").addText(linedata);//生成显示风格Element styleElement = documentElement.addElement("Style");//Style节点styleElement.addAttribute("id", "MyStyle");// IconStyle 图标风格Element iconStyleElement = styleElement.addElement("IconStyle");Element iconElement = iconStyleElement.addElement("Icon");
//          iconElement.addElement("href").addText("http://192.168.10.108:8080/images/mark_b.png");//在线图标iconStyleElement.addElement("scale").addText("0.250000");// LabelStyle  标签风格Element labelStyleElement = styleElement.addElement("LabelStyle");labelStyleElement.addElement("color").addText("00000000");labelStyleElement.addElement("scale").addText("0.000000");// PolyStyle 图形风格Element polyStyleElement = styleElement.addElement("PolyStyle");polyStyleElement.addElement("color").addText("5f00ff00");polyStyleElement.addElement("outline").addText("0");// LineStyle  路径线风格Element lineStyleElement = styleElement.addElement("LineStyle");lineStyleElement.addElement("color").addText("7f00ffff");lineStyleElement.addElement("width").addText("4");//创建kml到本地OutputFormat format = OutputFormat.createPrettyPrint();  format.setEncoding("utf-8");XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("D:/web/airportData/"+fileName+"_1.kml"),format);  xmlWriter.write(document); xmlWriter.close();  //开始对文件进行压缩,一个kml文件其实是一个压缩文件,里面包含一个kml文件和一个png图标String[] strs = new String[2];strs[0]="D:/web/Travels/"+fileName+"_1.kml";strs[1]="D:/web/Travels/images/img_mark.png";//这里写图片的路径  如果使用在线图标这段代码屏蔽writeKml(strs,"D:/web/Travels/"+ fileName);//压缩return true;}public static void writeKml(String[] strs, String kmlName) throws IOException{String[] files = strs;OutputStream os = new BufferedOutputStream( new FileOutputStream(kmlName + ".kml"));ZipOutputStream zos = new ZipOutputStream(os);byte[] buf = new byte[8192];int len;for (int i=0;i < files.length;i++) {  File file = new File(files[i]);if ( !file.isFile() )continue;ZipEntry ze = new ZipEntry( file.getName() );zos.putNextEntry( ze );BufferedInputStream bis = new BufferedInputStream( new FileInputStream( file ) );while ( ( len = bis.read( buf ) ) > 0 ) {zos.write( buf, 0, len );}zos.closeEntry();bis.close();}zos.closeEntry(); zos.close();os.close();}

这样就在"D:/web/Travels/"中生成了一个kml文件,然后就可以进行下一步操作了,web的话,一般就是提供接口下载kml文件。android的话,路径就要改一下,直接把文件生成在手机存储中,接下来就可以在Google Earth中打开kml就行。

java生成KML文件相关推荐

  1. java 生成kml文件_如何使用kml文件在地图上绘制路径?

    在上面的代码中,据我所见,您不会将kml数据传递到代码中的任何位置.要显示路由,您应该解析kml数据,即通过SAX解析器,然后在地图上显示路由标记. 请参阅下面的代码中的一个例子,但是它还没有完成-只 ...

  2. 超详细的java生成excel文件并下载

    在网上随手一搜,可以搜到很多java生成excel文件相关的博客,但每个都有不同,核心点说清楚了,但具体运用的时候,相信大家或多或少都没法一次直接运用,这样每次去找并且运用的时候很费时间,所以这也是我 ...

  3. POI以SAX方式解析Excel2007大文件(包含空单元格的处理) Java生成CSV文件实例详解...

    http://blog.csdn.net/l081307114/article/details/46009015 http://www.cnblogs.com/dreammyle/p/5458280. ...

  4. zipentry压缩乱码linux,java生成压缩文件 ZipEntry出现乱码的有关问题

    java生成压缩文件 ZipEntry出现乱码的问题 在项目中,一次导出的文件有好几个,而且文件内容比较大,最后考虑到把文件进行压缩在下载,开始试用JDK自带的ZIP压缩包时,ZipEntry ze ...

  5. java流与文件——java生成解压缩文件(夹)

    [0]README 0.1) 本文描述转自 http://blog.csdn.net/chenssy/article/details/9622171 , 旨在理解 java流与文件--java生成解压 ...

  6. java 生成csv文件_Java生成CSV文件实例详解

    本文实例主要讲述了java生成csv文件的方法,具体实现步骤如下: 1.新建csvutils.java文件: package com.saicfc.pmpf.internal.manage.utils ...

  7. Java生成ics文件

    java生成ICS文件,这玩意好象是个什么日程表类的东西.可以导入到outlook里面用. public void exportActivityDates(HttpServletRequest req ...

  8. 使用dom4j生成KML文件

    1.使用dom4j生成kml文件的时候,注意: Element root = DocumentHelper.createElement("kml").addElement(&quo ...

  9. iText5实现Java生成PDF文件完整版,二维码

    iText5实现Java生成PDF文件完整版 vue 项目中分别使用 vue-pdf 插件和内嵌 iframe 实现 PDF 文件预览,缩放,旋转,下载,保存等功能 ? Vue打印文件(v-print ...

  10. java 导出mdb文件_Java中Java生成mdb文件工具类

    package com.util; /**  * Java生成mdb文件[MS Access文件]  * 1. 在ClassPath下存一个空的blank.mdb. (也就是在你的项目中包含一个空白的 ...

最新文章

  1. mysql数据库前端缓存_MySQL数据库性能优化--缓存参数优化
  2. C# 计算时间差 用timespan函数
  3. c++不是类型安全的语言
  4. gamaredon_Gamaredon组织某样本分析
  5. Git客户端(Windows系统)的使用(Putty)(转)
  6. Eclipse安装Alibaba Cloud Toolkit并连接阿里云云数据库
  7. 系统动力学模型_蓝谷学术动态|典型海洋生态系统动力学模型构建、应用及发展入选2020年经典中国国际出版工程...
  8. 基于HTTP的QQ协议(转)
  9. Sentinel 简介与API订阅发布
  10. Oracle 学习笔记 14 -- 集合操作和高级子查询
  11. 配备 Apple T2 安全芯片的 Mac 电脑怎样用U盘装系统
  12. 赋能行业 共建生态 阿里巴巴首次亮相义乌标准展
  13. 思科路由器Ez***解决地址重叠测试
  14. 立创商城的元件原理图怎么弄到ad_(50条消息)立创EDA元件封装导入AD软件教程
  15. obs源码分析【二】:录制功能剖析
  16. 公式计算机实现,数学公式的计算机表达(精选).doc
  17. QQ微信实现连续发送消息【代码实现】
  18. Android Room 数据库详解
  19. 六安构建智慧城市节水管理平台
  20. EPLAN新建项目图纸

热门文章

  1. vscode最适合编程的 6 种字体
  2. c语言输出指定年份中所有的星期六,用C语言编写程序打印任意年份的日历
  3. ts html导出excel,用Angular2在客户端导入导出Excel
  4. 有关Altera 的CPLD工程编译报错的解决方法
  5. 微信开发之微信公众平台基本配置--服务器token验证(Java实现)
  6. 3d打印机 模型图纸下载_如何在3D打印机上制作第一个3D模型
  7. html页面数学公式添加(附图)
  8. 发那科机器人六轴放大器保险丝熔断_太仓FANUC发那科机器人免费测试维修{苏州罗韦维修芯片级维修机器人}...
  9. 应用搬家/应用迁移:c盘搬家哪个软件好?
  10. 防御 DDoS 的终极奥义——又拍云 SCDN