java 生成kml文件_java使用dom4j解析大量坐标点的kml文件

不多说,直接看代码:

public class MainTest {

/**

* @param args

*/

public static void main(String[] args) {

List dataList = null;

SAXReader reader = new SAXReader();

Document doc = null;

try {

doc = reader.read(new FileInputStream("e:/gg.kml"));

} catch (DocumentException e) {

e.printStackTrace();

} catch (FileNotFoundException e) {

e.printStackTrace();

}

Element root = doc.getRootElement();

// System.out.println("获取到的根元素: " + root.getName());

// root.accept(new MVisitor());

@SuppressWarnings("unchecked")

List attrChildList = root.elements();

// Document层

for (Element rootE : attrChildList) {

// System.out.println(rootE.getName());// Document

dataList = new ArrayList();

List list = rootE.elements();

for (Element documentE: list) {

// System.out.println(documentE.getName());// Folder

FolderBean folderBean = null;

List pkList = null;

if(documentE.getName() == "Folder"){

folderBean = new FolderBean();

pkList = new ArrayList();

List folderList = documentE.elements();// element个数!!!

// Folder层

for (Element folderE: folderList) {

// System.out.println(folderE.getName());

// System.out.println(folderE.getName()+" - "+folderE.getText());// Folder下

if(folderE.getName() == "description"){

folderBean.setDescription(folderE.getText());

}

PlacemarkEntity placemarkEntity = null;

// TODO 封装成对象

if(folderE.getName() == "Placemark"){

placemarkEntity = new PlacemarkEntity();

// Placemark层

List placemarkList = folderE.elements();

for (Element placemarE: placemarkList) {

// System.out.println(placemarE.getName());

// System.out.println(placemarE.getName()+" - "+placemarE.getText());

if(placemarE.getName() == "description"){

// System.out.println(placemarE.getText());

placemarkEntity.setDescription(placemarE.getText());

}

if(placemarE.getName() == "styleUrl"){

// System.out.println(placemarE.getText());

placemarkEntity.setStyleUrl(placemarE.getText());

}

// log:Point层-点

if(placemarE.getName() == "Point"){

// System.out.println(placemarE.getName());

// System.out.println(placemarE.elementText("coordinates"));

placemarkEntity.setCoordinates(placemarE.elementText("coordinates"));

}

// log:Polygon层-面

if(placemarE.getName() == "Polygon"){

// System.out.println(placemarE.getName());

List polygonList = placemarE.elements();

for (Element polygonE: polygonList) {

// System.out.println(polygonE.getName());

if(polygonE.getName() == "outerBoundaryIs"){

List outerBoundaryIsList = polygonE.elements();

for (Element outerBoundaryIsE: outerBoundaryIsList) {

// System.out.println(outerBoundaryIsE.getName());

// System.out.println(outerBoundaryIsE.elementText("coordinates"));

placemarkEntity.setCoordinates(outerBoundaryIsE.elementText("coordinates"));

}

}

}

}

// log:Polygon层-线

if(placemarE.getName() == "LineString"){

// System.out.println(placemarE.getName());

// System.out.print(placemarE.elementText("coordinates"));

placemarkEntity.setCoordinates(placemarE.elementText("coordinates"));

}

}

pkList.add(placemarkEntity);

}

folderBean.setPlacemarkList(pkList);

}

}

dataList.add(folderBean);

}

}

//下面是测试代码,看是否能正常解析

// System.out.println(""+dataList.size());

for(int i= 0;i < dataList.size(); i++){

String desc = dataList.get(i).getDescription();

System.out.println(desc);

// System.out.println(dataList.get(i).getPlacemarkList().size());

List list = dataList.get(i).getPlacemarkList();

for(PlacemarkEntity p : list){

System.out.println(p.getDescription()+"/"+p.getCoordinates());

}

}

}

}

其中用到的dom4j的jar包需要到官网上进行下载,代码中用的到的比较多的几个Api方法:

List attrChildList = root.elements();

获取这个几点下的所有子节点,返回一个集合

element.getName()

获取节点名称

element.elementText("xxx")

获取当前节点的数据

还有一个方法Iterator it = element.elementIterator();返回的是一个迭代,接下来可以用while循环进行迭代取值:

while (palIt.hasNext()){

Element palElement = (Element) palIt.next();

System.out.println(palElement.getName()+" - "+palElement.getText());

}

这种方式没办法判断具体哪个节点的名称是什么。


版权声明:本文为weixin_36359110原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。