GeoConverter.java 3.14 KB
package com.bsth.util;

import org.geolatte.geom.LineString;
import org.geolatte.geom.Point;
import org.geolatte.geom.Polygon;
import org.geolatte.geom.codec.Wkt;

/**
 * @author Hill
 */
public class GeoConverter {

    public static Point pointBd2wgs(String wkt) {
        if (wkt.indexOf("POINT") != 0) {
            throw new IllegalArgumentException("异常的Point wkt数据");
        }
        CoordinateConverter.Location location = CoordinateConverter.LocationMake(wkt);
        location = CoordinateConverter.transformFromBDToWGS(location);

        return (Point) Wkt.fromWkt(String.format("POINT(%s)", location.toString()));
    }

    public static Point pointWgs2bd(String wkt) {
        if (wkt.indexOf("POINT") != 0) {
            throw new IllegalArgumentException("异常的Point wkt数据");
        }
        CoordinateConverter.Location location = CoordinateConverter.LocationMake(wkt);
        location = CoordinateConverter.transformFromBDToWGS(location);

        return (Point) Wkt.fromWkt(String.format("POINT(%s)", location.toString()));
    }

    public static Polygon polygonBd2wgs(String wkt) {
        if (wkt.indexOf("POLYGON") != 0) {
            throw new IllegalArgumentException("异常的Polygon wkt数据");
        }
        StringBuilder sb = new StringBuilder("POLYGON((");
        wkt = wkt.substring(9, wkt.length() - 2);
        for (String point : wkt.split(",")) {
            CoordinateConverter.Location location = CoordinateConverter.LocationMake(point.trim());
            location = CoordinateConverter.transformFromBDToWGS(location);
            sb.append(location.toString()).append(",");
        }
        sb.deleteCharAt(sb.length() - 1).append("))");

        return (Polygon) Wkt.fromWkt(sb.toString());
    }

    public static LineString lineStringBd2wgs(String wkt) {
        if (wkt.indexOf("LINESTRING") != 0) {
            throw new IllegalArgumentException("异常的LineString wkt数据");
        }
        StringBuilder sb = new StringBuilder("LINESTRING(");
        wkt = wkt.substring(11, wkt.length() - 1);
        for (String coordinate : wkt.split(",")) {
            CoordinateConverter.Location location = CoordinateConverter.LocationMake(coordinate.trim());
            location = CoordinateConverter.transformFromBDToWGS(location);
            sb.append(location.toString()).append(",");
        }
        sb.deleteCharAt(sb.length() - 1).append(")");

        return (LineString) Wkt.fromWkt(sb.toString());
    }

    public static LineString lineStringWgs2bd(String wkt) {
        if (wkt.indexOf("LINESTRING") != 0) {
            throw new IllegalArgumentException("异常的LineString wkt数据");
        }
        StringBuilder sb = new StringBuilder("LINESTRING(");
        wkt = wkt.substring(11, wkt.length() - 1);
        for (String coordinate : wkt.split(",")) {
            CoordinateConverter.Location location = CoordinateConverter.LocationMake(coordinate.trim());
            location = CoordinateConverter.transformFromWGSToBD(location);
            sb.append(location.toString()).append(",");
        }
        sb.deleteCharAt(sb.length() - 1).append(")");

        return (LineString) Wkt.fromWkt(sb.toString());
    }
}