`
liuxing87327
  • 浏览: 81321 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

阅读更多

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计算

 

import java.awt.geom.GeneralPath;
import java.awt.geom.Point2D;
import java.util.ArrayList;
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);

        polygon.forEach(d -> 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 -> geoPolygon.add(buildPoint(map.get("x"), map.get("y"))));

        return geoPolygon;
    }

}

 

 

更多运算场景请参考:

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

 

3.使用数据库计算

SqlServer2008 

分享到:
评论

相关推荐

    java判断百度地图的点是否在多边形区域内

    java判断百度地图的点是否在多边形区域内,这是完整的demo

    判断指定的经纬度坐标点是否落在指定的多边形区域内

    在矢量多边形区域中,一个坐标点的位置是否在区域内 算法: C#代码,适用于任意多边形(凹凸多边形),但是没有考虑实际误差范围的情况(应用在实际问题解决中,接近区域一定范围是可以忽略的,这个误差范围考虑后算法的...

    高德地图实现多边形框选选中地图中坐标点.html

    高德地图实现多边形框选,选中展示地图中坐标点。实现坐标点框选。范围内坐标点选择。包括矩形,圆形,和任意多边形。。。需要修改key为自己注册的开发key

    微信小程序测量程序计算三角形多边形面积计算坐标正反算

    微信小程序,测量程序计算。三角形多边形面积计算,坐标正反算...

    用plsql编写计算坐标点是否在给定坐标点阵所围成的多边形内(不论凸多边形或凹多边形)的算法

    计算坐标点是否在给定坐标点阵所围成的多边形内(不论凸多边形或凹多边形),编写语言为plsql。纯sql,不依赖第三方库。

    C#计算多边形的重心方法

    地图开发经常需要画面,然后在面的中心标文字,有些面计算出来中心点不在面内;如果换成计算重心的算法就不会出现这种情况。代码测试可用,希望对你有帮助。

    百度地图测量多边形面积

    支持鼠标绘制多边形,计算绘制总长度和绘制区域面积。

    墨卡托投影法计算任意多边形面积

    墨卡托法,计算任意多边形曲面的面积。可以用于各种地图控件。

    QML地图Map中使用QPainterPath,并显示任意点经纬度位置

    我将QPainterPath在Map中进行使用并进行绘制,并使用C++和Qml中的函数进行相互调用计算获取点屏幕坐标和经纬度坐标。例子中使用了QPainterPath的QPainterPath::pointAtPercent获取绘制的轨迹全过程中的各个位置的...

    地理信息系统算法基础.rar

    2.10判断点是否在多边形内 2.10.1射线法 2.10.2转角法 2.11判断线段是否在多边形内 2.12判断折线是否在多边形内 2.13判断多边形是否在多边形内 2.14判断矩形是否在多边形内 2.15判断圆是否在多边形内 ...

    地理信息系统算法基础

    目录序前言第1章算法设计和分析1.1概述1.2算法设计原则1.3算法复杂性的...多边形内2.16判断点是否在圆内2.17判断线段、折线、矩形、多边形是否在圆内2.18判断圆是否在圆内2.19计算两条共线的线段的交点2.20计算...

    论文研究-一种数字地图自动生成系统及其拼接技术.pdf

    通过利用数字地图中的节点信息,同时考虑到拼接图中基本都会存在房屋等多边形的情况,先根据拐点信息取得待拼接图的坐标相对关系,再分多种情况对光栅地图数据文件和矢量地图数据文件分别进行自动拼接处理,从而完成...

    [地图绘制软件].Global.Mapper

    它还提供距离和面积计算,光栅混合、对比度调节、海拔高度查询、视线计算,以及一些高级功能,如图像校正、通过地表数据进行轮廓生成、通过地表数据观察分水岭、对3Dpoint数据转换为三角多边形和网格化等。通过内建...

    MapDrawingTools:此库在Google Map中绘制多边形,折线和点,并将坐标返回到您的App

    MapDrawingTools是一个Android库,用于在Google Map中手动绘制多边形,折线和点,并将坐标从库返回到您的App。 该库对于选择多点或绘制土地边界以从用户获取数据的应用程序很有用。 项目设置和依赖项 JDK 8 ...

    mapxtreme c#练习笔记

    推荐下载后面一个更新到40-50个代码的 这是本来一个以来学习mapxtreme所得,共有19个相关...8. 计算一个多边形内点的数目(已完成) 。。。 16. Feature相关程序 18. 比例尺和标签修饰(已完成) 19. 使用专题和图例

    googlemapapiforstef:一个文件制作器应用程序,集成了google map api用于绘制区域和测试坐标

    谷歌地图api(in)Filemaker(forstef) 集成了Google Map API的Filemaker应用,用于绘制区域和测试坐标。 - - - - - - 如何使用 - - - - - - - - - - - ... 将为每个坐标计算面积,结果将以JSON格式存储在dataLoca

    java生成线缓冲区的代码

    使用java写的线的缓冲区代码,使用eclipse直接打开就可以使用,这里返回的是经纬度的坐标串,修改传入坐标,直接可以得到线缓冲区的的坐标串,然后再可视化即可。

    arcgis工具

    通过指定一个缓冲距离,可以选择在其内部一定范围内包含要素的多边形。例如,对湖泊做缓冲区,可以选择距离湖泊500米范围内的林区。 与…有公共线段(Share a line segment with) 这种方法选择那些与其他要素...

    global_mapper_14.0.2.64位版

    它还提供距离和面积计算,光栅混合、对比度调节、海拔高度查询、视线计算,以及一些高级功能,如图像校正、通过地表数据进行轮廓生成、通过地表数据观察分水岭、对3Dpoint数据转换为三角多边形和网格化等。通过内建...

    GlobalMapper14.1破解汉化版.rar

    它还提供距离和面积计算,光栅混合、对比度调节、海拔高度查询、视线计算,以及一些高级功能,如图像校正、通过地表数据进行轮廓生成、影像图镶嵌、通过地表数据观察分水岭、对3Dpoint数据转换为三角多边形和网格化...

Global site tag (gtag.js) - Google Analytics