2015-10-06 1 views
1

Мне сложно совмещать геолокацию и возвышение в Картах Google. Мне нужно представить возвышение текущего местоположения. Кажется, что значения в переменной pos не эквивалентны event.latLng.Как совместить географию и высоту в Картах Google

Google Maps Elevation

Вот мой код пытается объединить геолокации и возвышение

function initMap() { 


var map = new google.maps.Map(document.getElementById('map'), { 
    center: {lat: -34.397, lng: 150.644}, 
    // disableDefaultUI: true, 
    mapTypeId: google.maps.MapTypeId.SATELLITE, 
    zoom: 20 
    }); 
    var elevator = new google.maps.ElevationService; 
    var infoWindow = new google.maps.InfoWindow({map: map}); 

    // Try HTML5 geolocation. 
    if (navigator.geolocation) { 
    navigator.geolocation.getCurrentPosition(function(position) { 
     var pos = { 
     lat: position.coords.latitude, 
     lng: position.coords.longitude 
     }; 
     displayLocationElevation(pos, elevator, infowindow); 
    }, function() { 
     handleLocationError(true, infoWindow, map.getCenter()); 
    }); 
    } else { 
    // Browser doesn't support Geolocation 
    handleLocationError(false, infoWindow, map.getCenter()); 
    } 
} 

function handleLocationError(browserHasGeolocation, infoWindow, pos) { 
    infoWindow.setPosition(pos); 
    infoWindow.setContent(browserHasGeolocation ? 
         'Error: The Geolocation service failed.' : 
         'Error: Your browser doesn\'t support geolocation.'); 
} 

function displayLocationElevation(location, elevator, infowindow) { 
    map.setCenter(location); 
    Initiate the location request 
    elevator.getElevationForLocations({ 
    'locations': [location] 
    }, function(results, status) { 
    infowindow.setPosition(location); 
    if (status === google.maps.ElevationStatus.OK) { 
     // Retrieve the first result 
     if (results[0]) { 
     // Open the infowindow indicating the elevation at the clicked position. 
     infowindow.setContent('The elevation at this point <br>is ' + 
      results[0].elevation + ' meters.'); 
     } else { 
     infowindow.setContent('No results found'); 
     } 
    } else { 
     infowindow.setContent('Elevation service failed due to: ' + status); 
    } 
    }); 
} 

UPDATE:, кажется, что переменная поз и event.latLng имеет разные значения. pos производит [Объект объекта], в то время как event.latLng производит (значение lat, длинное значение). Хотя использование pos.lat производит широту, то такую ​​же, как pos.long для долготы. Все еще пытаясь понять это ...

ответ

1

Хорошо, я понял! Вот код:

function initMap() { 
    var map = new google.maps.Map(document.getElementById('map'), { 
    center: {lat: -34.397, lng: 150.644}, 
    // disableDefaultUI: true, 
    mapTypeId: google.maps.MapTypeId.SATELLITE, 
    zoom: 20 
    }); 
    var elevator = new google.maps.ElevationService; 
    var infoWindow = new google.maps.InfoWindow({map: map}); 

    // Try HTML5 geolocation. 
    if (navigator.geolocation) { 
    navigator.geolocation.getCurrentPosition(function(position) { 
     var pos = { 
     lat: position.coords.latitude, 
     lng: position.coords.longitude 
     }; 
     map.setCenter(pos); 
     displayLocationElevation(map.getCenter(), elevator, infoWindow); 
    }, function() { 
     handleLocationError(true, infoWindow, map.getCenter()); 
    }); 
    } else { 
    // Browser doesn't support Geolocation 
    handleLocationError(false, infoWindow, map.getCenter()); 
    } 
} 

function handleLocationError(browserHasGeolocation, infoWindow, pos) { 
    infoWindow.setPosition(pos); 
    infoWindow.setContent(browserHasGeolocation ? 
         'Error: The Geolocation service failed.' : 
         'Error: Your browser doesn\'t support geolocation.'); 
} 

function displayLocationElevation(location, elevator, infoWindow) { 
    elevator.getElevationForLocations({ 
    'locations': [location] 
    }, function(results, status) { 
    infoWindow.setPosition(location); 
    if (status === google.maps.ElevationStatus.OK) { 
     if (results[0]) { 
     infoWindow.setContent('The elevation at this point <br>is ' + 
      results[0].elevation + ' meters in ' + location); 
     } else { 
     infoWindow.setContent('No results found'); 
     } 
    } else { 
     infoWindow.setContent('Elevation service failed due to: ' + status); 
    } 
    }); 
} 

Надеюсь, это поможет другим! :)

Смежные вопросы