2017-04-24 83 views
1

我有一个LatLng位置(用户的当前位置)和一个方位(来自多边形的中心)。我知道该位置当前位于多边形的内部,我可以从多边形的中心和用户的位置获取方位。计算给定LatLng位置和方位的多边形边上的位置

我需要知道从中心给定轴承的多边形边上的点。我设想这是来自中心线和多边形边缘之间的交点,但我在Google Maps API或任何在线示例中看不到任何助手。

这将使用谷歌地图SDK以Java编写,但我将不胜感激任何语言的解决方案,特别是Javascript。

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

Polygon with user location and centre

下面是用的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; 
} 

回答

2

根据您可以使用isLocationOnEdge(point:LatLng, poly:Polygon|Polyline, tolerance?:number)将返回一个给定的点在多边形的边缘,在一定的公差范围内的文档。您可以使用computeOffset与您的标题沿路径测试点,直到找到您需要的。另外,任何真正的/密集的空间分析我都没有在客户端技术方面得到太多的好运。我的首选方法通常是由PostGIS等空间数据库支持的服务器调用,然后我可以卸载所有分析。不过,如果你非常喜欢,你可以看看ESRI的JavaScript API。

+0

谢谢!很有帮助。我认为'computeOffset'可能是我们正在寻找的东西,但是这只会给我们一个给定容差内的读数。即距离多边形中心10m,精度为1m。折衷将是迭代过程中的计算时间和准确度之间的步长/公差距离。 这个_必须在移动设备上实时完成,因为它将在用户走路时随着用户位置的变化而更新。我想我们必须测试在100ms位置更新和逐步迭代的情况下执行此操作的成本。 –

+0

我还有一个想法。如果可能的话,在本地投影中工作可能会更快,更容易。 UTM或State Planar。如果你在美国,这种方式你所有的计算都只是简单的欧几里得几何,你可能只是自己做。当然,如果你需要支持全球的地点,这可能比它的价值更麻烦。 – sovemp

+0

不幸的是,我们使用的内容遍布欧洲,因此无法真正使用美国特定的解决方案!无论如何感谢你的想法。 –