[英]Distance between two locations in javascript
有人可以幫我解決這個代碼片段出了什么問題嗎? 我最終的目標是使用google javascript API查找距離兩個位置。 我已經使用geocomplete jquery函數進行地址自動完成。 點擊搜索沒有任何事情發生。我只是一個初學者請幫忙
<!DOCTYPE html>
<html>
<head>
<title>Distance between Two Places</title>
<meta charset="UTF-8">
<link rel="stylesheet" type="text/css" href="styles.css" />
<script src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAA7j_Q-rshuWkc8HyFI4V2HxQYPm-xtd00hTQOC0OXpAMO40FHAxT29dNBGfxqMPq5zwdeiDSHEPL89A" type="text/javascript"></script>
<script type="text/javascript">
var geocoder, location1, location2;
function initialize() {
geocoder = new GClientGeocoder();
}
function showLocation() {
geocoder.getLocations(document.forms[0].address1.value, function (response) {
if (!response || response.Status.code != 200)
{
alert("Sorry, we were unable to geocode the first address");
}
else
{
location1 = {lat: response.Placemark[0].Point.coordinates[1], lon: response.Placemark[0].Point.coordinates[0], address: response.Placemark[0].address};
geocoder.getLocations(document.forms[0].address2.value, function (response) {
if (!response || response.Status.code != 200)
{
alert("Sorry, we were unable to geocode the second address");
}
else
{
location2 = {lat: response.Placemark[0].Point.coordinates[1], lon: response.Placemark[0].Point.coordinates[0], address: response.Placemark[0].address};
calculateDistance();
}
});
}
});
}
function calculateDistance()
{
try
{
var glatlng1 = new GLatLng(location1.lat, location1.lon);
var glatlng2 = new GLatLng(location2.lat, location2.lon);
var miledistance = glatlng1.distanceFrom(glatlng2, 3959).toFixed(1);
var kmdistance = (miledistance * 1.609344).toFixed(1);
document.getElementById('results').innerHTML = '<strong>Distance: </strong>' + miledistance + ' miles (or ' + kmdistance + ' kilometers)';
}
catch (error)
{
alert(error);
}
}
</script>
</head>
<body onload="initialize()">
<form action="#" onsubmit="showLocation(); return false;">
<input id="geocomplete" type="text" name="address1" placeholder="Type in an address" size="90" />
<input id="geocomplete1" type="text" name="address2" placeholder="Type in an address" size="90" />
<input type="submit" name="find" value="Search" />
</form>
<p id="results"></p>
<script src="http://maps.googleapis.com/maps/api/js?sensor=false&libraries=places"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script src="../jquery.geocomplete.js"></script>
<script src="logger.js"></script>
<script>
$(function(){
$("#geocomplete").geocomplete()
.bind("geocode:result", function(event, result){
$.log("Result: " + result.formatted_address);
})
.bind("geocode:error", function(event, status){
$.log("ERROR: " + status);
})
.bind("geocode:multiple", function(event, results){
$.log("Multiple: " + results.length + " results found");
});
$("#geocomplete1").geocomplete()
.bind("geocode:result", function(event, result){
$.log("Result: " + result.formatted_address);
})
.bind("geocode:error", function(event, status){
$.log("ERROR: " + status);
})
.bind("geocode:multiple", function(event, results){
$.log("Multiple: " + results.length + " results found");
});
$("#find").click(function(){
$("#geocomplete").trigger("geocode");
});
$("#examples a").click(function(){
$("#geocomplete").val($(this).text()).trigger("geocode");
return false;
});
});
</script>
</body>
</html>
您可以使用Google地圖的DistanceMatrixService來計算兩點之間的距離。
以下函數計算
function calculateDistances() {
origin = document.getElementById('source').value; //Get the source string
destination = document.getElementById('dest').value; //Get the destination string
var service = new google.maps.DistanceMatrixService(); //initialize the distance service
service.getDistanceMatrix(
{
origins: [origin], //set origin, you can specify multiple sources here
destinations: [destination],//set destination, you can specify multiple destinations here
travelMode: google.maps.TravelMode.DRIVING, //set the travelmode
unitSystem: google.maps.UnitSystem.METRIC,//The unit system to use when displaying distance
avoidHighways: false,
avoidTolls: false
}, calcDistance); // here calcDistance is the call back function
}
回調函數calcDistance的代碼
function calcDistance(response, status) {
if (status != google.maps.DistanceMatrixStatus.OK) { // check if there is valid result
alert('Error was: ' + status);
} else {
var origins = response.originAddresses;
var destinations = response.destinationAddresses;
deleteOverlays();
for (var i = 0; i < origins.length; i++) {
var results = response.rows[i].elements;
for (var j = 0; j < results.length; j++) {
alert ('Distance from '+origins[i] + ' to ' + destinations[j]
+ ': ' + results[j].distance.text ); // alert the result
}
}
}
}
你可以在這里找到一個工作演示
調用calculateDistance()
,請將location1
和location2
作為參數
var earthRadius = 6371;
function calculateDistance(posA, posB) {
var lat = posB.lat-posA.lat; // Difference of latitude
var lon = posB.lon-posA.lon; // Difference of longitude
var disLat = (lat*Math.PI*earthRadius)/180; // Vertical distance
var disLon = (lon*Math.PI*earthRadius)/180; // Horizontal distance
var ret = Math.pow(disLat, 2) + Math.pow(disLon, 2);
ret = Math.sqrt(ret); // Total distance (calculated by Pythagore: a^2 + b^2 = c^2)
// Now you have the total distance in the variable ret
}
您也可以簡單地使用作為api v3的一部分公開的函數computeDistanceBetween()。 文檔可用於此處 。
該函數將兩個latlng作為參數,並以米為單位返回兩者之間的距離。
將其添加到JavaScript
的開頭:
google.maps.LatLng.prototype.distanceFrom = function(latlng) {
var lat = [this.lat(), latlng.lat()]
var lng = [this.lng(), latlng.lng()]
var R = 6378137;
var dLat = (lat[1]-lat[0]) * Math.PI / 180;
var dLng = (lng[1]-lng[0]) * Math.PI / 180;
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(lat[0] * Math.PI / 180 ) * Math.cos(lat[1] * Math.PI / 180 ) *
Math.sin(dLng/2) * Math.sin(dLng/2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c;
return Math.round(d);
}
然后使用這樣的function
:
var loc1 = new GLatLng(52.5773139, 1.3712427);
var loc2 = new GLatLng(52.4788314, 1.7577444);
var dist = loc2.distanceFrom(loc1);
alert(dist/1000);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.