Google地图API – 获取最接近的邮政编码
首先,感谢您花时间考虑我的问题和您的帮助。
我正在使用Google Maps API v3和JavaScript将地图添加到网站。
我有一个地址列表,并成功地绘制在地图上。 当用户input一个邮政编码时,地图重新显示他们的位置,显示最接近该点的标记。 现在,我需要创build一个最近的3或5个位置的列表视图到他们的邮政编码与驱动方向的链接。 我被卡住了…并打开build议。
谢谢!
通常的解决方法是使用google.maps.geometry.spherical库的 computeDistanceBetween(from:LatLng,to:LatLng,radius?:number)方法将数量减less到10左右,然后使用距离matrix返回到那些驾驶距离所以可以根据行驶距离(实际行驶距离)对结果进行sorting,并且根据请求限制内的实际行驶距离减小到最接近的3至5个位置。
示例(查找列表中距离列表最近的3个地方) (从FusionTable“pizza store”示例中借用的数据)
function codeAddress() { var address = document.getElementById('address').value; geocoder.geocode( { 'address': address}, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { map.setCenter(results[0].geometry.location); if (customerMarker) customerMarker.setMap(null); customerMarker = new google.maps.Marker({ map: map, position: results[0].geometry.location }); closest = findClosestN(results[0].geometry.location,10); // get driving distance closest = closest.splice(0,3); calculateDistances(results[0].geometry.location, closest,3); } else { alert('Geocode was not successful for the following reason: ' + status); } }); } function findClosestN(pt,numberOfResults) { var closest = []; document.getElementById('info').innerHTML += "processing "+gmarkers.length+"<br>"; for (var i=0; i<gmarkers.length;i++) { gmarkers[i].distance = google.maps.geometry.spherical.computeDistanceBetween(pt,gmarkers[i].getPosition()); document.getElementById('info').innerHTML += "process "+i+":"+gmarkers[i].getPosition().toUrlValue(6)+":"+gmarkers[i].distance.toFixed(2)+"<br>"; gmarkers[i].setMap(null); closest.push(gmarkers[i]); } closest.sort(sortByDist); return closest; } function sortByDist(a,b) { return (a.distance- b.distance) } function calculateDistances(pt,closest,numberOfResults) { var service = new google.maps.DistanceMatrixService(); var request = { origins: [pt], destinations: [], travelMode: google.maps.TravelMode.DRIVING, unitSystem: google.maps.UnitSystem.METRIC, avoidHighways: false, avoidTolls: false }; for (var i=0; i<closest.length; i++) request.destinations.push(closest[i].getPosition()); service.getDistanceMatrix(request, function (response, status) { if (status != google.maps.DistanceMatrixStatus.OK) { alert('Error was: ' + status); } else { var origins = response.originAddresses; var destinations = response.destinationAddresses; var outputDiv = document.getElementById('side_bar'); outputDiv.innerHTML = ''; var results = response.rows[0].elements; for (var i = 0; i < numberOfResults; i++) { closest[i].setMap(map); outputDiv.innerHTML += "<a href='javascript:google.maps.event.trigger(closest["+i+"],\"click\");'>"+closest[i].title + '</a><br>' + closest[i].address+"<br>" + results[i].distance.text + ' appoximately ' + results[i].duration.text + '<br><hr>'; } } }); }
上面的例子在infoWindow中的“Get Directions”链接
当你有一个邮政编码,你可以使用harversine公式来find你的位置的距离。