google-maps - terrestres - medir distancias google maps android
¿Cómo encontrar la distancia entre dos direcciones?(Lado del servidor Java) (4)
En realidad, Google tiene servicios web que puede usar en el lado del servidor para lograr esto.
En primer lugar, querrá usar la API de geocodificación para traducir direcciones en pares de coordenadas de latitud / longitud. A continuación, puede usar aquellos que considere apropiados (es decir, contra su propia base de datos si los está almacenando)
Si los artículos cercanos que desea encontrar son lugares reales en el mundo que Google probablemente ya conozca, puede probar la nueva API de Places de Google que le puede dar resultados dentro de un radio determinado.
Debe tener en cuenta que la traducción de coordenadas de latitud / longitud a distancias requiere algo de matemática, pero creo que es mejor hacerlo localmente (en el servidor en el que se ejecuta su aplicación) en lugar de ser transferido a un servidor externo ya que solo es matemático. Google produjo esto .
Tengo una aplicación de conocimiento geográfico "social" que estoy desarrollando, y la pregunta del millón es cómo incluir un conjunto de elementos que están "dentro de X millas" de "mi ubicación", ya que hay millones de aplicaciones que hacen eso, yo se sorprendió al descubrir que solo la API de Google Maps tiene un servicio web gratuito para eso, y lo que es peor, solo es compatible si se usa dentro de un Mapa de Google. Entonces, ¿tengo que desarrollar mi propia calculadora de distancia? ¿hay algún servicio gratuito / pago que me permita, al menos, transformar una dirección en una coordenada XY?
Estoy seguro de que hay una solución estándar de la industria (ya sea gratuita o comercial) pero aún no lo he encontrado
si estás usando SQL (no dijiste) ... creo que copié esto del proyecto NerdDinner:
ALTER FUNCTION [dbo].[DistanceBetween] (@Lat1 as real,
@Long1 as real, @Lat2 as real, @Long2 as real)
RETURNS real
AS
BEGIN
DECLARE @dLat1InRad as float(53);
SET @dLat1InRad = @Lat1 * (PI()/180.0);
DECLARE @dLong1InRad as float(53);
SET @dLong1InRad = @Long1 * (PI()/180.0);
DECLARE @dLat2InRad as float(53);
SET @dLat2InRad = @Lat2 * (PI()/180.0);
DECLARE @dLong2InRad as float(53);
SET @dLong2InRad = @Long2 * (PI()/180.0);
DECLARE @dLongitude as float(53);
SET @dLongitude = @dLong2InRad - @dLong1InRad;
DECLARE @dLatitude as float(53);
SET @dLatitude = @dLat2InRad - @dLat1InRad;
/* Intermediate result a. */
DECLARE @a as float(53);
SET @a = SQUARE (SIN (@dLatitude / 2.0)) + COS (@dLat1InRad)
* COS (@dLat2InRad)
* SQUARE(SIN (@dLongitude / 2.0));
/* Intermediate result c (great circle distance in Radians). */
DECLARE @c as real;
SET @c = 2.0 * ATN2 (SQRT (@a), SQRT (1.0 - @a));
DECLARE @kEarthRadius as real;
/* SET kEarthRadius = 3956.0 miles */
SET @kEarthRadius = 6376.5; /* kms */
DECLARE @dDistance as real;
SET @dDistance = @kEarthRadius * @c;
return (@dDistance);
END
ALTER FUNCTION [dbo].[NearestPeople]
(
@lat real,
@long real,
@maxdist real
)
RETURNS TABLE
AS
RETURN
SELECT Person.ID
FROM Person
WHERE dbo.DistanceBetween(@lat, @long, Latitude, Longitude) < @maxdist
Luego uso estas funciones SQL del servidor de esta manera en C #:
public IQueryable<Person> FindNearbyPeople(float latitude, float longitude, float maxdistance)
{
var people = from person in FindAllPeople()
join i in db.NearestPeople(latitude, longitude, maxdistance)
on person.ID equals i.ID
select person;
return people;
}
eso me dice quién (en este caso, gente) está cerca de mí dentro de una distancia máxima.
esta es la versión gratuita. Creo que SQL Server 2008 puede realizar esto con un paquete geográfico
¿Desea la distancia "en línea recta" o la distancia / tiempo de conducción?
La API de Mapquest parece ser más fácil ya que puedes usar una cadena de consulta.
Otra opción es geocoder.us (o .ca si es canadiense)
Si tiene suerte y está utilizando mysql o postgresql, que son bases de datos habilitadas espacialmente, puede ejecutar consultas espaciales contra ellos. Para mysql hay extensiones espaciales y para postgresql hay postgis .
Si decides utilizar el manual, mira esta pregunta para obtener información. Además, no entiendo cómo la API de Google Places puede ayudarte, ya que estás buscando tus datos en un radio y no en lugares de Google. Aclamaciones