我有一个 LatLng 位置(用户的当前位置)和一个方位 Angular (从多边形的中心开始)。我知道该位置当前在多边形内部,我可以从多边形的中心和用户的位置获取方位。
我需要知道给定中心方位的多边形边缘上的点。我设想这是多边形中心线与多边形边缘之间的交点,但我在 Google Maps API 或任何在线示例中都没有看到任何帮助程序。
这将使用 Google Maps SDK 用 Java 编写,但我希望能有任何语言的解决方案,尤其是 Javascript。
下面粗略地绘制的图表(希望)更清楚地说明了这个问题。
这是一个带有(不是)中心位置和用户位置的 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/