检查点是否在多边形(地图)中

2023-12-14

我正在尝试检查一个点是否在多边形中。
目前我已经尝试过这个功能

pointInPolygon:function (point,polygon){
    var i;
    var j=polygon.length-1;
    var inPoly=false;
    var lon = point.longitude;
    var lat = point.latitude;
    for (i=0; i<polygon.length; i++)
    {
        if (polygon[i][0]<lon && polygon[j][0]>=lon|| polygon[j][0]<lon && polygon[i][0]>=lon){
            if (polygon[i][0]+(lon-polygon[i][0])/(polygon[j][0]-polygon[i][0])*(polygon[j][1]-polygon[i][1])<lat){
                inPoly=!inPoly;
            }
        }
        j=i;
    }
    return inPoly;
}

...这个函数似乎适用于简单的多边形(http://jsfiddle.net/zTmr7/3/)但这对我不起作用...... 这是多边形的示例数据:

polygon: Array[14]
Array[2]
        0: "-120.190625"
        1: "29.6614549946937"
Array[2]
        0: "-116.87275390625"
        1: "32.6320990313992"
Array[2]
        0: "-116.60908203125"
        1: "34.0363970332393"
Array[2]
        0: "-120.89375"
        1: "41.9203747676428"
Array[2]
        0: "-114.74140625"
        1: "45.784484644005"
Array[2]
        0: "-115.971875"
        1: "48.6489780115889"
Array[2]
        0: "-132.758984375"
        1: "59.9891712248332"
Array[2]
        0: "-162.5099609375"
        1: "68.919753529737"
Array[2]
        0: "-168.6623046875"
        1: "68.9828872543805"
Array[2]
        0: "-168.4865234375"
        1: "64.2551601036027"
Array[2]
        0: "-179.874356794357"
        1: "51.0915874974707"
Array[2]
        0: "-179.999916362762"
        1: "13.1823178795562"
Array[2]
        0: "-143.8771484375"
        1: "19.9962034117847"
Array[2]
        0: "-120.190625"
        1: "29.6614549946937"  

也许你可以帮忙...提前致谢

附言。解决方案必须专门针对 Bing 地图或通用解决方案...


Google 地图 API 尚未提供检查多边形中的点的方法。经过一番研究后,我偶然发现了射线投射算法,该算法将确定 X-Y​​ 坐标是否位于绘制的形状内。这将转换为纬度和经度。以下内容扩展了 google.maps.polygon.prototype 以使用此算法。只需在 google.maps 加载后在代码中的某个位置包含此代码即可:

google.maps.Polygon.prototype.Contains = function(point) {
  var crossings = 0, path = this.getPath();

  // for each edge
  for (var i=0; i < path.getLength(); i++) {
      var a = path.getAt(i),
          j = i + 1;
      if (j >= path.getLength()) {
          j = 0;
      }
      var b = path.getAt(j);
      if (rayCrossesSegment(point, a, b)) {
        crossings++;
      }
  }

  // odd number of crossings?
  return (crossings % 2 == 1);

  function rayCrossesSegment(point, a, b) {
    var px = point.lng(),
        py = point.lat(),
        ax = a.lng(),
        ay = a.lat(),
        bx = b.lng(),
        by = b.lat();
    if (ay > by) {
        ax = b.lng();
        ay = b.lat();
        bx = a.lng();
        by = a.lat();
    }
    // alter longitude to cater for 180 degree crossings
    if (px < 0) { px += 360 };
    if (ax < 0) { ax += 360 };
    if (bx < 0) { bx += 360 };

    if (py == ay || py == by) py += 0.00000001;
    if ((py > by || py < ay) || (px > Math.max(ax, bx))) return false;
    if (px < Math.min(ax, bx)) return true;

    var red = (ax != bx) ? ((by - ay) / (bx - ax)) : Infinity;
    var blue = (ax != px) ? ((py - ay) / (px - ax)) : Infinity;
    return (blue >= red);
  }
};

这里我们通过定义一个名为“Contains”的函数来扩展 google.maps.Polygon 的功能,该函数可用于确定函数参数中提供的纬度经度是否在多边形内。在这里,我们利用光线投射算法并使用该算法开发了一个函数。现在做完这么多练习后,我们可以检查以下几点:

var point = new google.maps.LatLng(52.05249047600099,-0.6097412109375); var 多边形 = new google.maps.Polygon({path:[INSERT_PATH_ARRAY_HERE]}); if (polygon.Contains(point)) { // 点在多边形内部 }

完整代码和demo请访问:http://coun sellbyabhi.blogspot.in/2013/01/google-map-check-whether-point-latlong.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检查点是否在多边形(地图)中 的相关文章

  • SupportMapFragment 地图为空

    我使用以下代码在 Xamarin Android 中显示地图 private SupportMapFragment mapFragment private GoogleMap map protected override void OnCr
  • Angular2 找不到命名空间“google”

    我正在与angular2 google maps以及最新版本的 Angular2 我正在尝试将一些本地地图组件功能转换为自己文件中的服务maps service ts 例如 地图组件 ts getGeoLocation lat number
  • 从数据层中删除所有特征

    我用过类似的东西 var map function initialize map new google maps Map document getElementById map canvas zoom 4 center lat 28 lng
  • 如何消除 Windows 应用商店主页上的恶意“计数器”?

    我有一个简约的主页 4 个按钮和一个 Bing 地图 但是 当我运行该应用程序时 我在左上角和右上角看到两个流氓 计数器 不知道如何描述它们 这是左上角的那个 是什么原因造成的 我怎样才能摆脱它们 顺便说一句 左边的黑色垂直条是 设计的 没
  • 仅在 MarshMallow(6.0 和 6.0.1)上使用 MapActivity 进行 MapView 会使应用程序崩溃

    我正在使用 MapActivity 扩展我的活动 以动态实现 MapView 其中包含显示 mapView 的片段 public abstract class BaseHomeActivity extends MapActivity 我已经
  • 用 ruby​​ 解决旅行商问题(50 多个位置)

    我在一家快递公司工作 目前 我们 手动 解决了 50 多个地点的路线 我一直在考虑使用 Google Maps API 来解决这个问题 但我读到有 24 点的限制 目前我们在服务器中使用 Rails 因此我正在考虑使用 ruby 脚本来获取
  • 在 Android 模拟器上运行 google 地图应用程序

    My application uses Google Maps v2 This application successfully working on Android powered device I tried to run the sa
  • 黑白 PNG 转 SVG

    我有一个河流 土地掩码来区分土地与河流 湖泊 该文件的大小为 W 43 200x H 21 600 由于 RAM 立即填满 因此无法打开该文件 我已将文件分成 3600 3600 块 它们可以正常打开 然而 我试图在谷歌地图中绘制陆地上的文
  • Android:随着设备移动在mapv2上绘制路径

    我正在制作一个应用程序 我必须在其中当我的设备移动时在地图上绘制路径 我搜索了我的教程但都显示在两点之间绘制路径但是我要当我的设备移动时绘制路径 任何有关此的帮助将不胜感激 当你的设备移动时 你的意思是什么 无论哪种方式 您都必须使用位置侦
  • 如何将自定义 POI 添加到谷歌地图导航

    我是 Android 系统的快乐用户 并且经常使用 Google 地图导航 betta 到目前为止 您可以在开车时在地图上添加具有不同 POI 商店 银行 加油站等 的图层 我的问题是是否有一个 API 可以添加您自己的图层 带有您自定义的
  • Google Places Api 排名=距离不起作用[重复]

    这个问题在这里已经有答案了 我使用 Google Places api 只获取距我所在位置最近的一些地点 但有些结果根本不显示 例如 tbilisimarriot 和 CourtyardbyMarriot 结果 而且列表也无法正确显示从最近
  • 将信息框添加到通过 Google 地图绘制的圆圈的右边缘

    试图弄清楚如何将 信息框 附加 到 Google 地图 v3 中绘制的圆圈的左边缘 这是我到目前为止所拥有的 http jsfiddle net a1aq9ey8 6 http jsfiddle net a1aq9ey8 6 如果放大 缩小
  • 矩阵向量变换

    我正在编写一个代码来制作软件蒙皮器 骨骼 皮肤动画 并且我正处于 优化 阶段 蒙皮器工作得很好 并且在 Core 上 1 09 毫秒内对 4900 个三角形网格与 22 个骨骼进行蒙皮Duo 2 Ghz 笔记本 我需要知道的是 1 有人可以
  • 如何将定位模式从默认模式更改为“高精度/省电”(仅限设备)

    我正在尝试使用本教程实现谷歌地图来获取当前位置 Android 谷歌地图教程 https www androidtutorialpoint com intermediate android map app showing current l
  • 从鼠标位置获取地图纬度经度

    我正在尝试将鼠标在谷歌地图上的位置转换为 LatLng 对象 我看到很多关于通过谷歌地图 点击 事件等获取位置的帖子 如下所示 google maps event addListener map click function event m
  • 如何根据纬度和经度获取国家名称

    如何使用 C 从纬度和经度获取国家 地区名称 我正在使用 Bing Map API Location location12 new Location location Latitude location Longitude MapLayer
  • OpenGL ES 2.0 中的纹理点?

    我正在尝试在 OpenGL ES 2 0 中为粒子系统实现纹理点 例如点精灵 我遇到的问题是所有点都渲染为实心黑色方块 而不是正确映射纹理 我已经验证 gl PointCoord 实际上返回从 0 0 到 1 0 的 x y 值 这将映射到
  • Google 地图位于活动的中间区域

    我正在使用 Android studio 2 1 2 我检查了一下 大多数问题要么使用旧版本的 Android studio 要么使用一些旧的类 这些类不适用于我的情况 从文件 gt 新项目 gt 我使用了选项Google Maps Act
  • 如何重新定位或移动 Google Maps SDK 上的当前位置按钮?

    如何将 Objective C 中的当前位置按钮移至我的偏好 现在 我已启用它 但底角有东西挡住了它 Thanks 您可以使用 padding 将按钮向上移动 self mapView padding UIEdgeInsets top 0
  • Google 地图 API:忽略 DirectionService 请求中的季节性限制

    我目前正在开发一张地图 其中显示两点之间的最短路线 使用不同的交通工具 我注意到 有时 例如在冬季关闭的道路不会被考虑在内 我发现我可以使用方向服务 下面的代码 忽略高速公路 收费站和渡轮 但我一生都无法弄清楚如何 是否可以忽略季节性限制

随机推荐

  • 如何在区域地图上赋予不透明度

    我遇到了 html 不透明度问题 目前我已经使用 css 应用了不透明度 但它不起作用 我的 html 和 css 代码如下 area class transbox href test1 htm target blank area opac
  • Swift 索引 0 超出表视图中空数组的范围

    我正在尝试使用 PFTableViewCell 连接到主电视控制器的 2 个标签进行解析来填充 tableview 当我添加 TableView 的节数 numberOfRowsInSection 时 应用程序崩溃 但是当我删除它时 它可以
  • MVC3中相同类型实体之间的多对多关系

    我有一个 ASP NET MVC3 应用程序 其中使用 Entity Framework 4 3 Code First 和迁移 我一直在尝试在相同类型的实体之间创建多对多关系 但是当我使用迁移搭建迁移支架时 它会生成一对一关系 这个想法是一
  • 为什么 ColumnTransformer 中的 SimpleImputer 创建额外的列?

    我正在关注 Aurelion Geron 的机器学习书籍 我正在尝试ColumnTransformer班级 当我包括SimplerImputer 创建了一个附加列 我明白那个SimplerImputer用于填充列中缺失的值total bed
  • 使用 Ajax 动态显示数据

    在此代码中 单击 like 按钮后 数据已添加到数据库中 我现在想做的是添加数据后 我将查询所选项目的总赞数并在不加载页面的情况下显示它 这是我现在的代码 我的看法 p i class fa fa thumbs up i span span
  • 调用存储过程,当过程名称在mysql的变量中时

    我有 mysql 存储过程 我想在变量中调用它和过程名称 我使用了准备好的语句 但它给了我一个错误 我不是 mysql 专家 这是准备好的声明 gt PREPARE stmt1 FROM CALL SET q sys search SET
  • 如何避免在Windows上使用Git Bash时每次都需要输入解密私钥的密码?

    我有一个自动构建服务 可以从 git 私人存储库下载 问题是 当它尝试克隆存储库时 它需要提供密码 因为它不被记住 因此 由于没有人为交互 它会永远等待密码 我如何强制它记住 id rsa pub 对于 Windows 用户 请注意 这是我
  • 获取当前目录下所有子目录的列表

    有没有办法在Python中返回当前目录中所有子目录的列表 我知道您可以使用文件来执行此操作 但我需要获取目录列表 您的意思是直接子目录 还是树下的每个目录 无论哪种方式 你都可以使用os walk去做这个 os walk directory
  • 强制应用程序在启动时启动

    我正在为我的孩子们创建一个类似信息亭的环境 我的应用程序扫描并杀死了很多游戏进程 因为它们无法玩 M 或以上评级的游戏 因为它们还很年轻 禁用任务管理器 因为它们不需要或不使用它 但我需要一种可以运行该应用程序一次的方法 并且它会复制 添加
  • 绘制到画布 onDraw 有效,绘制 onTouchEvent 无效

    我在 Android SDK 中摆弄 2D 图形 但在一个简单的示例中遇到了麻烦 我假设我只是误解了一些基本的 基本的东西 public class DrawView extends View Paint paint new Paint C
  • iOS 故事板自动布局和添加约束

    我正在更改我的应用程序以支持 3 5 英寸显示屏 目前支持4英寸显示屏 屏幕布局如下所示 如何在故事板中添加以下约束 我在故事板中启用了自动布局选项 如何将button1和button2宽度设置为超级视图宽度的一半 并且两者应该在超级视图宽
  • 为什么在 BinaryReader 上调用 Dispose() 会导致编译错误?

    我有以下类 它在内部使用 BinaryReader 并实现 IDisposable class DisposableClass IDisposable private BinaryReader reader public Disposabl
  • Pyspark 合并数据框中的 WrappedArrays

    当前的 Pyspark 数据帧具有以下结构 col2 的 WrappedArrays 列表 id col2 a WrappedArray code2 WrappedArray code1 code3
  • 为什么 some_func(…) != some_func.call(this, …) 在构造函数中

    我一直以为some function 完全一样some function call this 这似乎不适用于构造函数 对象构造上下文中的调用 function Class members parent function Ctor value
  • .Net 程序集 PublicKeyToken

    经常可以看到一个PublicKeyToken对于装配体 例如 C1 Win C1Input C1NumericEdit C1 Win C1Input 4 版本 4 0 20131 33296 文化 中性 公钥令牌 7e7ff60f0c214
  • 列出/扫描可用的 WiFi iPhone

    我正在寻找一种在 iPhone 应用程序中显示可用 WiFi 的方法 到目前为止 我的研究结果如下 实现此类功能的应用程序已从 AppStore 中删除 意味着您无法通过 AppStore 部署应用程序 这对我来说很好 Apple 在私有框
  • 如何截取 TensorFlow 中自动微分的梯度?

    假设我有两个带有激活的后续层a1 and a2 有没有办法拦截自动微分从第 2 层传播到第 1 层的梯度 即 E a2 我想更改这个渐变 然后将其传递到第 1 层 From tf train Optimizer 文档 在应用渐变之前对其进行
  • 如何在本机管道中包含二进制算术运算符

    我正在尝试将二进制算术运算符集成到本机管道中 可重现的例子 without pipe round sample 1 2 1 3 2 1 0 33 with pipe 1 2 gt sample 1 3 gt round 2 1 0 3333
  • 在 Mac 上启动自定义品牌 Chromium 构建时出现“捆绑包中未找到 icudtl.dat”?

    我正在尝试从源代码构建 Chromium 我能够为 Windows 构建它 现在我正在尝试为 Mac 构建它 我正在自定义品牌 这样我就可以拥有自己的图标和浏览器名称 我做了这些更改 chromium src chrome app them
  • 检查点是否在多边形(地图)中

    我正在尝试检查一个点是否在多边形中 目前我已经尝试过这个功能 pointInPolygon function point polygon var i var j polygon length 1 var inPoly false var l