我有一个LatLng位置(用户的当前位置)和一个方位(来自多边形的中心)。我知道该位置当前位于多边形的内部,我可以从多边形的中心和用户的位置获取方位。计算给定LatLng位置和方位的多边形边上的位置
我需要知道从中心给定轴承的多边形边上的点。我设想这是来自中心线和多边形边缘之间的交点,但我在Google Maps API或任何在线示例中看不到任何助手。
这将使用谷歌地图SDK以Java编写,但我将不胜感激任何语言的解决方案,特别是Javascript。
以下粗略绘制的图表更清楚地说明了问题(希望)。
下面是用的jsfiddle(不是)中心位置和用户位置。
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;
}
谢谢!很有帮助。我认为'computeOffset'可能是我们正在寻找的东西,但是这只会给我们一个给定容差内的读数。即距离多边形中心10m,精度为1m。折衷将是迭代过程中的计算时间和准确度之间的步长/公差距离。 这个_必须在移动设备上实时完成,因为它将在用户走路时随着用户位置的变化而更新。我想我们必须测试在100ms位置更新和逐步迭代的情况下执行此操作的成本。 –
我还有一个想法。如果可能的话,在本地投影中工作可能会更快,更容易。 UTM或State Planar。如果你在美国,这种方式你所有的计算都只是简单的欧几里得几何,你可能只是自己做。当然,如果你需要支持全球的地点,这可能比它的价值更麻烦。 – sovemp
不幸的是,我们使用的内容遍布欧洲,因此无法真正使用美国特定的解决方案!无论如何感谢你的想法。 –