javascript - 给定 LatLng 位置和方位 Angular 计算多边形边缘的位置

标签 javascript java google-maps google-maps-api-3 gis

我有一个 LatLng 位置(用户的当前位置)和一个方位 Angular (从多边形的中心开始)。我知道该位置当前在多边形内部,我可以从多边形的中心和用户的位置获取方位。

我需要知道给定中心方位的多边形边缘上的点。我设想这是多边形中心线与多边形边缘之间的交点,但我在 Google Maps API 或任何在线示例中都没有看到任何帮助程序。

这将使用 Google Maps SDK 用 Ja​​va 编写,但我希望能有任何语言的解决方案,尤其是 Javascript。

下面粗略地绘制的图表(希望)更清楚地说明了这个问题。

Polygon with user location and centre

这是一个带有(不是)中心位置和用户位置的 jsfiddle。

http://jsfiddle.net/joshkopecek/rh9mzyoa/2/

function initialize() {
  var map = new google.maps.Map(document.getElementById("map"), {
    zoom: 4,
    center: new google.maps.LatLng(22.7964, 79.8456),
    mapTypeId: google.maps.MapTypeId.HYBRID
  });

  var coords = [
    new google.maps.LatLng(18.979026, 72.949219), //Mumbai
    new google.maps.LatLng(28.613459, 77.255859), //Delhi
    new google.maps.LatLng(22.512557, 88.417969), //Kolkata
    new google.maps.LatLng(12.940322, 77.607422), //Bengaluru
  ];

  metros = new google.maps.Polygon({
    paths: coords,
    strokeColor: "#0000FF",
    strokeOpacity: 0.8,
    strokeWeight: 2,
    fillColor: "#0000FF",
    fillOpacity: 0.26
  });

  userPos = new google.maps.LatLng(21.1952534, 81.2680344);
  userMarker = new google.maps.Marker({
    position: userPos,
    map: map
  });

  centrePos = new google.maps.LatLng(22.049832, 78.9022019);

  centreMarker = new google.maps.Marker({
    position: centrePos,
    map: map
  });

  heading = google.maps.geometry.spherical.computeHeading(centrePos, userPos);

  metros.setMap(map);

  var metros;
  var userMarker;
  var centreMarker;
  var heading;
}

最佳答案

根据文档,您可以使用 isLocationOnEdge(point:LatLng, poly:Polygon|Polyline, tolerance?:number) 如果给定点位于多边形的边缘,则返回一定的宽容度。您可以使用带有航向的 computeOffset 来测试路径上的点,直到找到所需的点。

顺便说一句,任何真正的/密集的空间分析,我在客户端技术方面都不太幸运。我首选的方法通常是由空间数据库(如 PostGIS)支持的服务器调用,然后我可以将所有分析卸载到该数据库。不过,如果您愿意,可以查看 ESRI 的 JavaScript api。

关于javascript - 给定 LatLng 位置和方位 Angular 计算多边形边缘的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43593584/

相关文章:

java - JPA 未知 SqlResultSetMapping

javascript - 如何修改标记?

javascript - 在 JavaScript 中使用基于用户输入的条件的问题

java - Spark 流处理 rawSocketStream

java - 在单独的类中访问私有(private)变量?

javascript - 将 id 添加到信息窗口(谷歌地图 API)

ios - 谷歌地图 iOS SDK : Map not loading

javascript - JQuery 委托(delegate) IE8

javascript - onMessage 事件永远不会被调用

javascript - 像常规 map API 热图一样自定义 Fusion Table 热图?