Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用给定位置搜索最接近的候选对象_Javascript_Php_Google Maps_Geolocation - Fatal编程技术网

Javascript 使用给定位置搜索最接近的候选对象

Javascript 使用给定位置搜索最接近的候选对象,javascript,php,google-maps,geolocation,Javascript,Php,Google Maps,Geolocation,我在我们的数据库里有一份候选人名单,上面有他们的郊区、州和邮政编码。根据客户的要求,我们将根据客户提供的郊区找到最近的郊区 问题是当前算法仅计算航线距离(指两点之间的线性距离)。在现实生活中,我们会有河流或山脉。例如 客户端在A点,B点,C点在我们的数据库中。A和B之间的航线距离较短,但在现实生活中,你必须过桥才能到达B。因此,在本例中,C是最短的候选者 我想知道这是否可以通过第三方api(谷歌地图?)实现。请记住,我们的数据库中有3000多个候选人,因此循环遍历每个候选人并与客户位置进行比较

我在我们的数据库里有一份候选人名单,上面有他们的郊区、州和邮政编码。根据客户的要求,我们将根据客户提供的郊区找到最近的郊区

问题是当前算法仅计算航线距离(指两点之间的线性距离)。在现实生活中,我们会有河流或山脉。例如

客户端在A点,B点,C点在我们的数据库中。A和B之间的航线距离较短,但在现实生活中,你必须过桥才能到达B。因此,在本例中,C是最短的候选者

我想知道这是否可以通过第三方api(谷歌地图?)实现。请记住,我们的数据库中有3000多个候选人,因此循环遍历每个候选人并与客户位置进行比较是不现实的

这-提供您想要的,驾驶(或任何其他模式)位置之间的距离

但有趣的问题是,有3000个点必须与特定目的地进行比较。一个可能的解决方案是结合使用您当前的算法和google maps api的多原点功能。( google maps distance API允许指定多个起点/目的地。)

所以:
-使用当前算法按航空公司距离查找最近的10个或30个郊区。
-在一个查询中将所有这些位置作为原始参数发送到google maps API

api将返回目标和所有原点之间的距离。如果最近郊区不在我们使用航空公司距离算法计算的10个或20个最近郊区,则在100%的时间内,这可能不会给出正确的结果。但这不太可能

注:

请查看谷歌地图API的确切使用限制。每天的请求数量和您可以提供的起点数量。所有这些都有文档记录,但这-提供您想要的,驾驶(或任何其他模式)位置之间的距离

但有趣的问题是,有3000个点必须与特定目的地进行比较。一个可能的解决方案是结合使用您当前的算法和google maps api的多原点功能。( google maps distance API允许指定多个起点/目的地。)

所以:
-使用当前算法按航空公司距离查找最近的10个或30个郊区。
-在一个查询中将所有这些位置作为原始参数发送到google maps API

api将返回目标和所有原点之间的距离。如果最近郊区不在我们使用航空公司距离算法计算的10个或20个最近郊区,则在100%的时间内,这可能不会给出正确的结果。但这不太可能

注:


请查看谷歌地图API的确切使用限制。每天的请求数量和您可以提供的起点数量。Google Maps API提供了一个方向服务,可以通过
Google.Maps.DirectionsService
对象()访问

当向方向服务发送请求时,您可以指定旅行模式(自行车、驾驶、公交、步行),因此这将考虑相对于航空公司距离的额外距离

这里有一个演示()。希望能有帮助

函数initMap(){
var pointA=new google.maps.LatLng(51.2750,1.0870),
pointC=新的google.maps.LatLng(50.7700,0.28),
pointB=新的google.maps.LatLng(51.5379,0.7138),
airDistAB=google.maps.geometry.spheremic.ComputedDistanceBetween(点A,点B),
airDistAC=google.maps.geometry.spheremic.ComputedDistanceBetween(pointA,pointC),
myOptions={
缩放:5,
中心:波因塔,
mapTypeId:google.maps.mapTypeId.ROADMAP
},
map=new google.maps.map(document.getElementById('map-canvas'),myOptions),
//实例化一个方向服务。
directionsService=新的google.maps.directionsService,
directionsDisplay=新建google.maps.DirectionsRenderer({
地图:地图
}),
markerA=new google.maps.Marker({
位置:pointA,
标题:“A点”,
标签:“A”,
地图:地图
}),
markerB=新的google.maps.Marker({
位置:B点,
标题:“B点”,
标签:“B”,
地图:地图
}),
markerC=new google.maps.Marker({
位置:pointC,
标题:“C点”,
标签:“C”,
地图:地图
}),
outputAtoB=document.getElementById('a2b'),
outputAtoC=document.getElementById('a2c');
//计算路线
responseAB=calculateAndDisplayRoute(方向服务、方向显示、点A、点B、输出ToB、空区选项卡、真);
responseAC=calculateAndDisplayRoute(方向服务、方向显示、pointA、pointC、OutputToC、airDistAC、false);
//单击标记B以获取从A到B的路线
markerB.addListener('click',function(){
计算显示路线(方向服务、方向显示、点A、点B、输出TOB、空区选项卡、真);
});
markerC.addListener('单击',函数()){
计算显示路线(方向服务、方向显示、pointA、pointC、OutputToC、airDistAC、true);
});
document.getElementById('mode')。addEventListener('change',function(){
计算显示路线(方向服务、方向显示、点A、点B、输出TOB、空区选项卡、真);
计算显示路线(方向服务、方向显示、pointA、pointC、OutputToC、airDistAC、false);
});
}
函数calculateAndDisplayRoute(方向服务、方向显示、点1、点2、输出文本、airDist、显示){
var selectedMode=document.getElementById('mode')。值;
方向服务.路线({
来源:第1点,
目的地:第2点,
travelMode:google.maps.travelMode[selectedMode]
},功能(响应、状态){
if(status==google.maps.directionstatus.OK){
如果(显示)