Package org.geoserver.wps.ppio

Source Code of org.geoserver.wps.ppio.GPXHelper

/* (c) 2014 Open Source Geospatial Foundation - all rights reserved
* (c) 2001 - 2013 OpenPlans
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.wps.ppio;

import java.util.List;

import org.geoserver.wps.ppio.gpx.GpxType;
import org.geoserver.wps.ppio.gpx.RteType;
import org.geoserver.wps.ppio.gpx.WptType;
import org.opengis.feature.Property;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.feature.type.Name;

import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.LineString;
import com.vividsolutions.jts.geom.MultiLineString;
import com.vividsolutions.jts.geom.MultiPoint;
import com.vividsolutions.jts.geom.Point;

/**
* Small helper class to convert from JTS Geometry to GPX types
*
*
*/
public class GPXHelper {
    private GpxType gpxType;

    public GPXHelper(GpxType gpx) {
        this.gpxType = gpx;
    }

    public void addFeature(SimpleFeature f) {

        Object defaultGeometry = f.getDefaultGeometryProperty();
        if (defaultGeometry == null) {
            return;
        }
        String nameStr = null;
        String commentStr = null;
        String descriptionStr = null;

        for (Property p : f.getProperties()) {
            Object object = p.getValue();
            if (object instanceof Geometry) {
                continue;
            } else {
                Name name = p.getName();
                if (name.getLocalPart().equalsIgnoreCase("name")
                        || name.getLocalPart().equalsIgnoreCase("geographicalName")) {
                    nameStr = p.getValue().toString();
                } else if (name.getLocalPart().equalsIgnoreCase("description")) {
                    descriptionStr = p.getValue().toString();
                } else if (name.getLocalPart().equalsIgnoreCase("comment")) {
                    commentStr = p.getValue().toString();
                }
            }
        }

        Object go = ((Property) defaultGeometry).getValue();
        if (go instanceof MultiLineString) {
            int nrls = ((MultiLineString) go).getNumGeometries();
            for (int li = 0; li < nrls; li++) {
                Geometry ls = ((MultiLineString) go).getGeometryN(li);
                RteType rte = toRte((LineString) ls);
                if (nameStr != null)
                    rte.setName(nameStr);
                if (commentStr != null)
                    rte.setCmt(commentStr);
                if (descriptionStr != null)
                    rte.setDesc(descriptionStr);
                gpxType.getRte().add(rte);
            }
        } else if (go instanceof LineString) {
            RteType rte = toRte((LineString) go);
            if (nameStr != null)
                rte.setName(nameStr);
            if (commentStr != null)
                rte.setCmt(commentStr);
            if (descriptionStr != null)
                rte.setDesc(descriptionStr);
            gpxType.getRte().add(rte);
        } else if (go instanceof MultiPoint) {
            int nrpt = ((MultiPoint) go).getNumGeometries();
            for (int pi = 0; pi < nrpt; pi++) {
                Geometry pt = ((MultiPoint) go).getGeometryN(pi);
                WptType wpt = toWpt((Point) pt);
                if (nameStr != null)
                    wpt.setName(nameStr);
                if (commentStr != null)
                    wpt.setCmt(commentStr);
                if (descriptionStr != null)
                    wpt.setDesc(descriptionStr);
                gpxType.getWpt().add(wpt);
            }
        } else if (go instanceof Point) {
            WptType wpt = toWpt((Point) go);
            if (nameStr != null)
                wpt.setName(nameStr);
            if (commentStr != null)
                wpt.setCmt(commentStr);
            if (descriptionStr != null)
                wpt.setDesc(descriptionStr);
            gpxType.getWpt().add(wpt);
        } else {
            // no useful geometry, no feature!
            return;
        }

    }

    public WptType toWpt(Point p) {
        return coordToWpt(p.getX(), p.getY());
    }

    private WptType coordToWpt(double x, double y) {
        WptType wpt = new WptType();
        wpt.setLon(x);
        wpt.setLat(y);
        return wpt;
    }

    public RteType toRte(LineString ls) {
        RteType rte = new RteType();
        List<WptType> rtePts = rte.getRtept();

        Coordinate[] coordinates = ((Geometry) ls).getCoordinates();
        for (int pi = 0; pi < coordinates.length; pi++) {
            rtePts.add(coordToWpt(coordinates[pi].x, coordinates[pi].y));
        }
        return rte;

    }
}
TOP

Related Classes of org.geoserver.wps.ppio.GPXHelper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.