计算地图坐标是否在多边形内_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 计算地图坐标是否在多边形内

计算地图坐标是否在多边形内

 2015/4/21 3:40:21  liuxing87327  程序员俱乐部  我要评论(0)
  • 摘要:1.使用百度地图计算请参考:http://api.map.baidu.com/library/GeoUtils/1.2/examples/simple.htmlhttp://api.map.baidu.com/library/GeoUtils/1.2/docs/symbols/BMapLib.GeoUtils.html2.使用java计算importjava.awt.geom.GeneralPath;importjava.awt.geom.Point2D;importjava.io.File
  • 标签:

1.使用百度地图计算

请参考:

http://api.map.baidu.com/library/GeoUtils/1.2/examples/simple.html

http://api.map.baidu.com/library/GeoUtils/1.2/docs/symbols/BMapLib.GeoUtils.html

?

?

2.使用java计算

?

class="java">import java.awt.geom.GeneralPath;
import java.awt.geom.Point2D;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 功能说明:坐标几何运算
 * 作者:liuxing(2015-04-20 22:19)
 */
public class GeoUtils {

    /**
     * 检查一个坐标是否在多边形内
     * @param x 纬度 31.000...
     * @param y 经度 121.000...
     * @param polygonPoints 多边形边界的经纬度数组
     * @return
     */
    public static boolean isPointInPolygon(double x, double y, List<Map<String, Double>> polygonPoints) {
        Point2D.Double geoPoint = buildPoint(x, y);
        List<Point2D.Double> geoPolygon = buildPolygon(polygonPoints);
        return GeoUtils.isPointInPolygon(geoPoint, geoPolygon);
    }

    /**
     * 检查一个坐标是否在多边形内
     * @param point 检查的点坐标
     * @param polygon 参照的多边形
     * @return
     */
    public static boolean isPointInPolygon(Point2D.Double point, List<Point2D.Double> polygon) {
        GeneralPath p = new GeneralPath();

        Point2D.Double first = polygon.get(0);
        p.moveTo(first.x, first.y);
        polygon.remove(0);
        for (Point2D.Double d : polygon) {
            p.lineTo(d.x, d.y);
        }

        p.lineTo(first.x, first.y);

        p.closePath();

        return p.contains(point);
    }

    /**
     * 构建一个坐标点
     * @param x 纬度 31.000...
     * @param y 经度 121.000...
     * @return
     */
    public static Point2D.Double buildPoint(double x, double y) {
        return new Point2D.Double(x, y);
    }

    /**
     * 构建一个多边形
     * @param polygonPoints
     * @return
     */
    public static List<Point2D.Double> buildPolygon(List<Map<String, Double>> polygonPoints) {
        List<Point2D.Double> geoPolygon = new ArrayList<>();

        polygonPoints.forEach(map -> {
            Point2D.Double polygonPoint = buildPoint(map.get("x"), map.get("y"));
            geoPolygon.add(polygonPoint);
        });

        return geoPolygon;
    }

}

?

更多运算场景请参考:

http://docs.oracle.com/javase/8/docs/api/java/awt/Polygon.html

?

?

?

上一篇: java&数据库计算两个坐标的距离 下一篇: 没有下一篇了!
  • 相关文章
发表评论
用户名: 匿名