Ver Mensaje Individual
  #11 (permalink)  
Antiguo 25/11/2013, 16:19
txemaarbulo
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Distancia mínima entre un punto y un área en Google Maps

Cita:
Iniciado por brusjc Ver Mensaje
Parece que la pregunta genera demasiadas incertidumbres y me gustaría centrar el tema. Mi intención es marcar un área (B) en medio del campo, no en la ciudad, y un punto A en medio del campo, no en la ciudad. Lo que quiero hacer es saber la mínima distancia (en línea recta se entiende) entre el punto A y cualquier punto del área B.
(...)
Si sirve la ayuda, yo partiría de ver la distancia entre dos puntos. ¿Soluciones?:
- Por Google Maps: libraries=geometry
Código Javascript:
Ver original
  1. var París = new google.maps.LatLng(48.856614, 2.352222);
  2. var SanFrancisco = new google.maps.LatLng(37.774929, -122.419416);
  3. var distancia = google.maps.geometry.spherical.computeDistanceBetween(París, SanFrancisco);
  4. alert ('La distancia es: '+ distancia+' m');
- Directamente por la fórmula del Haversine:
Código Javascript:
Ver original
  1. Number.prototype.toRad = function() {
  2.   return this * Math.PI / 180;
  3. }
  4. var lat1 = 48.856614;
  5. var long1 = 2.352222;
  6. var lat2 = 37.774929;
  7. var long2 = -122.419416;
  8. var R = 6371; // Radio medio de la tierra en kilómetros
  9. var dLat = (lat2-lat1).toRad();  // Funciones Javascript en radianes
  10. var dLong = (long2-long1).toRad();
  11. var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
  12.   Math.cos(lat1.toRad()) * Math.cos(lat2.toRad()) *
  13.   Math.sin(dLong/2) * Math.sin(dLong/2);
  14. var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
  15. var d = (R * c).toFixed(3); // Distancia en km con tres decimales
  16. alert (d);

Aunque teóricamente ambos consideran la curvatura del planeta Tierra (spherical en Google, y la media -Radio medio de la tierra 6371 kilómetros en el segundo caso)- ), hay una diferencia de 10.030 kms. sobre casi 9.000 kms, (posiblemente por la consideración de la media de la tierra que está entre 6357 kms. en el radio polar y 6371 kms en el radio ecuatorial).

En tu caso (y ahora no te desarrollo código pero sí la idea) lo que se puede hacer es comparar mi punto (digamos que lat1 y long1 con los puntos de tu área.
Hacer que un área (polígono) sea una polilínea (trazado de una serie de puntos)es tan solo la especificación que le dados en google maps. Es cuestión de ir midiendo las distancias con cada punto y compararlas.

Claro está que, siendo la distancia entre a y (polígono) los puntos b, c, d, ... los puntos más cortos, c y d, puede haber un punto más cercado en su trayectoria. Esto creo que es "¿misión imposible?".

Espero que lo consigas. Tiene futuro la idea.