package test;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.math3.analysis.polynomials.PolynomialsUtils;
import de.micromata.opengis.kml.v_2_2_0.Document;
import de.micromata.opengis.kml.v_2_2_0.Boundary;
import de.micromata.opengis.kml.v_2_2_0.Coordinate;
import de.micromata.opengis.kml.v_2_2_0.Folder;
import de.micromata.opengis.kml.v_2_2_0.Geometry;
import de.micromata.opengis.kml.v_2_2_0.Kml;
import de.micromata.opengis.kml.v_2_2_0.LineString;
import de.micromata.opengis.kml.v_2_2_0.LineStyle;
import de.micromata.opengis.kml.v_2_2_0.LinearRing;
import de.micromata.opengis.kml.v_2_2_0.MultiGeometry;
import de.micromata.opengis.kml.v_2_2_0.Placemark;
import de.micromata.opengis.kml.v_2_2_0.Point;
import de.micromata.opengis.kml.v_2_2_0.PolyStyle;
import de.micromata.opengis.kml.v_2_2_0.Polygon;
import de.micromata.opengis.kml.v_2_2_0.Style;
import de.micromata.opengis.kml.v_2_2_0.StyleSelector;
/**
*
* 创建人:Dream~天涯
* 创建时间:2015-8-7 上午11:38:00
* 邮箱:154494796@qq.com
* 备注:
*/
public class DemoKML2 {
@SuppressWarnings("unchecked")
public static void main(String[] args) throws NoSuchFieldException, SecurityException{
String color = null;
Integer width = null;
List<KmlPoint> kmlPointList = new ArrayList<KmlPoint>();
List<KmlLine> kmlLineList = new ArrayList<KmlLine>();
List<KmlArea> kmlAreaList = new ArrayList<KmlArea>();
KmlProperty kmlProperty = new KmlProperty();
List<Geometry> polygon = null;
List<Coordinate> coordinates;
MultiGeometry multiGeometry = null;
LineString lineString = null;
LinearRing linearRing = null;
Point point = null;
final Kml kml = Kml.unmarshal(new File("C://x.kml"));
Document document = (Document) kml.getFeature();
/*final Placemark placemark = (Placemark) kml.getFeature();*/
Folder folder = (Folder) document.getFeature().get(1);
int folderSize = folder.getFeature().size();
// loop over all countries / Placemarks
for (int i = 0; i < folderSize; i++) {
Placemark placemark = (Placemark) folder.getFeature().get(i);
List<StyleSelector> style = placemark.getStyleSelector();
for(int m=0 ; m<style.size() ; m++){
Style s=(Style) style.get(m);
PolyStyle polyStyle=s.getPolyStyle();
LineStyle lineStyle = s.getLineStyle();
if(polyStyle==null){
color = lineStyle.getColor();
width = (int) lineStyle.getWidth();
}else{
color = polyStyle.getColor();
}
}
String geometryNamess = placemark.getGeometry().toString().split("@")[0];
String[] geometryNames = geometryNamess.split("\\.");
String geometryName = geometryNames[geometryNames.length-1];
if("MultiGeometry".equals(geometryName)){
multiGeometry = (MultiGeometry) placemark.getGeometry();
polygon = multiGeometry.getGeometry();
for(int j=0 ; j<polygon.size() ; j++){
KmlArea kmlArea = new KmlArea();
Boundary outerBoundaryIs = ((Polygon) polygon.get(j)).getOuterBoundaryIs();
linearRing = outerBoundaryIs.getLinearRing();//面
coordinates = linearRing.getCoordinates();
kmlArea.setPoints(coordinates.toString());
kmlArea.setColor(color);
kmlAreaList.add(kmlArea);
}
}else if("LineString".equals(geometryName)){//线
KmlLine kmlLine = new KmlLine();
lineString = (LineString) placemark.getGeometry();
coordinates = lineString.getCoordinates();
System.out.println(coordinates);
kmlLine.setColor(color);
kmlLine.setPoints(coordinates.toString());
kmlLine.setWidth(width);
kmlLineList.add(kmlLine);
}else if("Point".equals(geometryName)){//点
KmlPoint kmlPoint = new KmlPoint();
point = (Point) placemark.getGeometry();
coordinates = point.getCoordinates();
//System.out.println(coordinates);
kmlPoint.setColor(color);
kmlPoint.setPoints(coordinates.toString());
kmlPointList.add(kmlPoint);
}else if("Polygon".equals(geometryName)){
polygon = (List<Geometry>) placemark.getGeometry();
for(int j=0 ; j<polygon.size() ; j++){
Boundary outerBoundaryIs = ((Polygon) polygon.get(j)).getOuterBoundaryIs();
linearRing = outerBoundaryIs.getLinearRing();
coordinates = linearRing.getCoordinates();
}
}else{
System.out.println("其他类型,请联系开发者补充..........................");
}
}
kmlProperty.setKmlPoints(kmlPointList);
kmlProperty.setKmlLines(kmlLineList);
kmlProperty.setKmlAreas(kmlAreaList);
System.out.println();
}
}
java解析kml文件
最新推荐文章于 2025-04-11 23:08:19 发布