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


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

直接上代码,代码中有注释自己根据需求自己添加删除

package com.yf.fruitforest.common;import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Namespace;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;import java.io.*;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;public class KmlUtils {//coordinates(经纬度:经度,纬度,高度)代表一个地理信息的对象集合(自定义)  生成kml的名称public static boolean setTravelsKml(String coordinates, String fileName) throws IOException {Element root = DocumentHelper.createElement("kml");Document document = DocumentHelper.createDocument(root);//根节点添加属性/*这里用namespace是因为当时xmlns这个属性添加不上去,所以用这个方法可行* Namespace namespace = Namespace.get("http://www.opengis.net/kml/2.2");*  root.add(namespace);* */Namespace namespace = Namespace.get("http://www.opengis.net/kml/2.2");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");root.add(namespace);Element documentElement = root.addElement("Document");// documentElement.addElement("name").addText(fileName);// documentElement.addElement("Snippet").addText("");// Element folderElement = documentElement.addElement("Document");//添加一个目录// folderElement.addAttribute("id", "FeatureLayer0");documentElement.addElement("name").addText("轨迹点位"); //名称//folderElement.addElement("Snippet").addText(""); //显示在Google Earth之中的对description的简短概要.//生成点位图标数据int i = 1;// for (String travelRecord:coordinates) {//  i++;Element placeMarkElement = documentElement.addElement("Placemark");//在文件夹中添加一个地标//placeMarkElement.addAttribute("id", String.valueOf(i));placeMarkElement.addElement("name").addText("点位" + String.valueOf(i));placeMarkElement.addElement("styleUrl").addText("#randomColorRegion");// placeMarkElement.addElement("Snippet").addText("");placeMarkElement.addElement("description").addText("R");//简介//placeMarkElement.addElement("styleUrl").addText("#MyStyle");//风格Element pointElement = placeMarkElement.addElement("Polygon");// Element pointElement = placeMarkElement.addElement("Point");Element outerBoundaryIs1 = pointElement.addElement("outerBoundaryIs");Element LinearRing1 = outerBoundaryIs1.addElement("LinearRing");//分解// String[] con = travelRecord.split(",");//添加点位的经纬度坐标以及高度(显示时绘制高度m)LinearRing1.addElement("coordinates").addText(coordinates);//可以是是任何几何形状的子元素,定义每一个点的经度、纬度和高度(按照严格的顺序). 多个点使用空格隔开,经纬度按照WGS84标准.//  }//生成轨迹线路径数据
//        Element lineElement = documentElement.addElement("Placemark");//在文件夹外添加一个地标
//        lineElement.addElement("name").addText("轨迹线");
//        lineElement.addElement("description").addText("");
//        lineElement.addElement("styleUrl").addText("#MyStyle");
//        Element pointElement1 = lineElement.addElement("LineString");
//        pointElement1.addElement("altitudeMode").addText("absolute");
//        pointElement1.addElement("extrude").addText("1");
//        pointElement1.addElement("tessellate").addText("1");String linedata = "";//每个坐标以及高度用换行符或空格分开/*for (TravelRecord travelRecord:travelRecords) {linedata =linedata+"\n"+ travelRecord.lng+","+travelRecord.lat+",30";}*///pointElement.addElement("coordinates").addText("115.86602,25.70925");//生成显示风格//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 Style = placeMarkElement.addElement("Style");Element polyStyleElement = Style.addElement("PolyStyle");polyStyleElement.addElement("color").addText("96ffff00");//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();}
}

生成的kml文件如图:

将kml文件导入到http://geojson.io/效果如图

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. 学习《Linux设备模型浅析之驱动篇》笔记(一)
  2. Loadrunner11如何使用非IE浏览器录制脚本
  3. 第三次作业-介绍一款原型设计工具
  4. 设计,成本与开发细节的讨论
  5. mysql8.0.19.0_分享MySql8.0.19 安装采坑记录
  6. 人体工学腰垫,保腰神器,改善久坐腰酸背痛
  7. 在jupyter编写代码列出HTML,Jupyter ~ 像写文章般的 Coding (附:同一个ipynb文件,执行多语言代码)...
  8. 【BZOJ3174】【codevs25442075】拯救小矮人,DP+贪心
  9. 【IDEA】IDEA 单元测试 System.in 没办法输入
  10. 如何为属性是disabled的表单绑定js事件
  11. 挺起基础软件自主创新的脊梁 锐易特软件荣获2008中国软件信息化创新奖
  12. 接口测试总结-值得一看哟
  13. 2017-09-20 前端日报
  14. AI房产户型图识别3DRender
  15. DSP2812开发板学习
  16. 项目管理软件之禅道和JIRA的共同点与区别
  17. 一阶低通滤波器方程_一阶低通滤波器
  18. iOS 音乐播放 Swift
  19. html5常用的单标签,HTML5的常用的标签
  20. java数组初始化为 1_Java Class 1.1数组初始化

热门文章

  1. 学会这几个简单的bat代码,轻松在朋友面前装一波13
  2. 首涂模板第四套还原经典挖片苹果cmsv10自适应主题模板
  3. mysql数据卸载工具_如何把Mysql卸载干净(亲测有效)_Mysql_数据库
  4. 关于xcode中的代码比较工具
  5. 获取三角形外接圆的圆心坐标、半径
  6. Cmder的下载安装及使用
  7. 基于javaweb的医院门诊收费管理系统(java+html+jdbc+mysql)
  8. Arduino控制微小的六足3D打印机器人
  9. 电商工具箱之阿里巴巴获取商品
  10. 免费下载百度文库文档