samedi 9 août 2014

JavaScript - Distance entre plusieurs latlng avec Google maps API - Stack Overflow


If I have stored in my DB several latlng points, and I want to compare those points with my actual latlng position( giving me the distance between each latlng points with my actual latlng), how would that be posible with google maps API? or it's something that it would be easier using my database?




Computing the distance between two points on a sphere requires the use of the haversine formula, which requires a pretty solid understanding of trigonometry.


The easier way would be to leverage the Google Maps API which has the handy function computeDistanceBetween in the google.maps.geometry.spherical namespace.


Here's some sample code for using computeDistanceBetween:


var home = ['London', new google.maps.LatLng(51.5, -0.1167)];

var pts = [
['Prague', new google.maps.LatLng(50.08, 14.43)],
['Paris', new google.maps.LatLng(48.856614, 2.3522219000000177)],
['Berlin', new google.maps.LatLng(52.5200065999, 13.404953999999975)]
];

// provide a shortcut for the distance function
var dist = google.maps.geometry.spherical.computeDistanceBetween;

pts.forEach(function(pt){
var d = dist(home[1], pt[1])/1000;
// d is now the distance (in km) between the home coordinate and the point
});

See working example here: http://jsfiddle.net/aJTK2/5/




If you intend to use your database for this sort of work, you might want to think about using PostGIS for this. With PostGIS installed:


CREATE EXTENSION postgis;

SELECT ST_Distance(
ST_GeographyFromText('POINT(115.764286 -31.746416)'),
ST_GeographyFromText('POINT(151.036606 -33.906896)')
);

Produces:


   st_distance    
------------------
3295294.42439749
(1 row)

Compared to Google Maps output, which thinks it's about 3700 km (walking, not crow-flies).


So that seems about right, distance wise.


Note that this is spheroid distance, i.e over the earth's surface, not point-to-point through it.


Watch out for the co-ordinate order in PostGIS vs Google Maps.


To learn more about PostGIS:




If I have stored in my DB several latlng points, and I want to compare those points with my actual latlng position( giving me the distance between each latlng points with my actual latlng), how would that be posible with google maps API? or it's something that it would be easier using my database?



Computing the distance between two points on a sphere requires the use of the haversine formula, which requires a pretty solid understanding of trigonometry.


The easier way would be to leverage the Google Maps API which has the handy function computeDistanceBetween in the google.maps.geometry.spherical namespace.


Here's some sample code for using computeDistanceBetween:


var home = ['London', new google.maps.LatLng(51.5, -0.1167)];

var pts = [
['Prague', new google.maps.LatLng(50.08, 14.43)],
['Paris', new google.maps.LatLng(48.856614, 2.3522219000000177)],
['Berlin', new google.maps.LatLng(52.5200065999, 13.404953999999975)]
];

// provide a shortcut for the distance function
var dist = google.maps.geometry.spherical.computeDistanceBetween;

pts.forEach(function(pt){
var d = dist(home[1], pt[1])/1000;
// d is now the distance (in km) between the home coordinate and the point
});

See working example here: http://jsfiddle.net/aJTK2/5/



If you intend to use your database for this sort of work, you might want to think about using PostGIS for this. With PostGIS installed:


CREATE EXTENSION postgis;

SELECT ST_Distance(
ST_GeographyFromText('POINT(115.764286 -31.746416)'),
ST_GeographyFromText('POINT(151.036606 -33.906896)')
);

Produces:


   st_distance    
------------------
3295294.42439749
(1 row)

Compared to Google Maps output, which thinks it's about 3700 km (walking, not crow-flies).


So that seems about right, distance wise.


Note that this is spheroid distance, i.e over the earth's surface, not point-to-point through it.


Watch out for the co-ordinate order in PostGIS vs Google Maps.


To learn more about PostGIS:



0 commentaires:

Enregistrer un commentaire