java解析kml文件

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();
    }
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值