【问题标题】:Direction api: check if a place falls in the route path between 2 places方向api:检查一个地方是否落在2个地方之间的路线路径中
【发布时间】:2013-12-28 09:36:03
【问题描述】:

我正在使用 Google Direction API 来绘制 2 个地点 A 和 B 之间的路线路径。我能够做到这一点。现在,我需要检查给定的地点 C 是否落在 A 和 B 的路线路径中。

这是我从代码中生成的路由路径的快照。

下面是对应的代码:

function initialize() {
                var input = document.getElementById('searchTextFieldSource');
                var input1 = document.getElementById('searchTextFieldDestination');

                var autocomplete = new google.maps.places.Autocomplete(input);
                var autocomplete1 = new google.maps.places.Autocomplete(input1);
                google.maps.event.addListener(autocomplete1, 'place_changed', function () {
                    var place = autocomplete.getPlace();
                    document.getElementById('city1').value = place.name;
                    var place1Lat = place.geometry.location.lat();
                    var place1Lng = place.geometry.location.lng();
                    document.getElementById('cityLat1').value = place1Lat;
                    document.getElementById('cityLng1').value = place1Lng;

                    var obj = new Object();
                    obj.city =place.name;
                    obj.latitude = place.geometry.location.lat();
                    obj.longitude = place.geometry.location.lng();
                    locations.push(obj);


                    var place2 = autocomplete1.getPlace();
                    document.getElementById('city2').value = place2.name;
                    var place2Lat = place2.geometry.location.lat();
                    var place2Lng = place2.geometry.location.lng();
                    document.getElementById('cityLat2').value = place2Lat;
                    document.getElementById('cityLng2').value = place2Lng;

                    var obj = new Object();
                    obj.city = place2.name;
                    obj.latitude = place2.geometry.location.lat();
                    obj.longitude = place2.geometry.location.lng();
                    locations.push(obj);

                    directionsDisplay = new google.maps.DirectionsRenderer();
                    var startPlace = new google.maps.LatLng(place1Lat, place1Lng);

                    var mapOptions = {
                        zoom:7,
                        center: startPlace
                    }

                    var map = new google.maps.Map(document.getElementById('map'), mapOptions);
                    directionsDisplay.setMap(map);
                    //refreshMap(locations);

                    var start = $("#city1").val();
                    var end = $("#city2").val();
                    var request = {
                          origin:start,
                          destination:end,
                          travelMode: google.maps.TravelMode.DRIVING
                    };
                    directionsService.route(request, function(response, status) {
                        if (status == google.maps.DirectionsStatus.OK) {
                          directionsDisplay.setDirections(response);
                        }
                    });
                });
            }

我该怎么办?

【问题讨论】:

  • 我在您的代码中没有看到“放置 C”。一种选择是使用 RouteBoxer 为您的路线确定合理的界限。如果中间点包含在这些边界内,那可能就足够了,否则您可以执行进一步的测试(例如与路线折线的距离。请参阅this similar question(也没有答案)
  • @geocodezip - 这不太一样。在这种情况下,您已经知道位置 C 的位置。RouteBoxer 对这个问题来说太过分了。
  • 是的。在 C 已知的情况下使用 RouteBoxer 将是计算密集型的。

标签: google-maps google-maps-api-3 google-places-api google-directions-api


【解决方案1】:

您可以使用几何库(您可以通过将脚本 src 更改为 https://maps.googleapis.com/maps/api/js?sensor=false&libraries=geometry 来请求谷歌地图)并使用 isLocationOnEdge 并使用点 C 的 LatLng 和从 @ 返回的折线987654325@.

https://developers.google.com/maps/documentation/javascript/geometry#isLocationOnEdge

再一次,如果您将 C 点添加为航路点,C 点可能总是在 A 和 B 之间,因此确定 C 点是否“在路上”实际上有点困难棘手的概念 - 距离有多远才不会“在路上”?

【讨论】:

  • 所以使用isLocationOnEdge,我只能找到折线上的点对吗?不是可能靠近折线的点(比如距离折线 0.5 公里)。
  • 查看文档的链接。 isLocationOnEdge 接受一个可选的第三个参数 - tolerance 这是您为仍考虑在边缘上的点指定的度数 - 即函数返回 true 值得指出的是相同的度数将根据确切的纬度或经度为您提供不同的真实距离(以公里或英里为单位)。
  • 有什么想法吗?如何用 php 和我的 sql 做到这一点。我有一个多维数组,其中的每个对象都有 {lat,lng}。我想检查多维数组中的任何一个或多个点是否位于当前路线上
  • @KamleshJha 你完成了你的需求工作吗?我有同样的问题..请回复。
猜你喜欢
  • 2017-06-26
  • 2012-02-21
  • 1970-01-01
  • 2015-09-30
  • 2019-03-11
  • 1970-01-01
  • 1970-01-01
  • 2017-11-08
  • 1970-01-01
相关资源
最近更新 更多