# Distancia entre 2 puntos usando Fórmula Haversine -- sql campo con postgresql camp codereview Relacionados El problema

## Distance between 2 points using Haversine Formula

1

### problema

Español

Esta es una implementación de la fórmula haversina en SQL.

¿Cómo puedo simplificar y mejorar la función?

` ` SELECT to_char(MIN((day::timestamp at time zone 'UTC') at time zone 'America/Los_Angeles'), 'YYYY-MM-DD'),    device_id,    dblat,    dblong,    min(distance_in_km) AS dist FROM   (SELECT day,       device_id,       dblong,       dblat,       111.045*  DEGREES(ACOS(COS(RADIANS(latpoint))                            * COS(RADIANS(cast(dblat as double precision)))                            * COS(RADIANS(longpoint) - RADIANS(cast(dblong as double precision)))                            + SIN(RADIANS(latpoint)) * SIN(RADIANS(cast(dblat as double precision))))) AS distance_in_km   FROM    (SELECT MIN(DATE(created_at)) AS day,            device_id,            MAX(doorbot_longitude) AS dblong,            MAX(doorbot_latitude) AS dblat   FROM bi_dev.jcc_doorbot_web_setups     WHERE status = 'valid'       AND doorbot_longitude != 0       AND device_id IS NOT NULL       AND doorbot_kind IN ('bell', 'bell_v3', 'lpdv_1')       AND created_at > '2016-01-01'     GROUP BY 2)s JOIN   (SELECT 38.5848702 AS latpoint, -77.7923891 AS longpoint) AS p     ON 1=1)a  WHERE distance_in_km < 5  GROUP BY 2,           3,           4 ORDER BY dist  ` `
Original en ingles

This is an implementation of the Haversine formula in SQL.

How can I simplify and improve the function?

``SELECT to_char(MIN((day::timestamp at time zone 'UTC') at time zone 'America/Los_Angeles'), 'YYYY-MM-DD'),    device_id,    dblat,    dblong,    min(distance_in_km) AS dist FROM   (SELECT day,       device_id,       dblong,       dblat,       111.045*  DEGREES(ACOS(COS(RADIANS(latpoint))                            * COS(RADIANS(cast(dblat as double precision)))                            * COS(RADIANS(longpoint) - RADIANS(cast(dblong as double precision)))                            + SIN(RADIANS(latpoint)) * SIN(RADIANS(cast(dblat as double precision))))) AS distance_in_km   FROM    (SELECT MIN(DATE(created_at)) AS day,            device_id,            MAX(doorbot_longitude) AS dblong,            MAX(doorbot_latitude) AS dblat   FROM bi_dev.jcc_doorbot_web_setups     WHERE status = 'valid'       AND doorbot_longitude != 0       AND device_id IS NOT NULL       AND doorbot_kind IN ('bell', 'bell_v3', 'lpdv_1')       AND created_at > '2016-01-01'     GROUP BY 2)s JOIN   (SELECT 38.5848702 AS latpoint, -77.7923891 AS longpoint) AS p     ON 1=1)a  WHERE distance_in_km < 5  GROUP BY 2,           3,           4 ORDER BY dist ``

## Lista de respuestas

8  PostgreSQL ORM muy simple en C ++ usando LIBPQ  ( Very simple postgresql orm in c using libpq )
Estoy trabajando en un conjunto de clases auxiliares para trabajar con Libpq en C ++ y quiero poder pasar objetos a las clases de ayuda y tenerlas internament...

8  Extraer nodos de una base de datos gráfica  ( Extracting nodes from a graph database )
Soy nuevo en los postgres y las postgis, pero no a las aplicaciones geoespaciales. Tengo una tabla cargada con datos gráficos en forma de enlaces (bordes). ...

11  Nodo.js contraseña de salazón / hashing  ( Node js password salting hashing )
En vista de la reciente incumplimiento de LinkedIn, ¿alguien le importaría revisar mis rutinas de acceso a los datos relacionadas con el acceso de los usuario...

13  Esquema de base de datos de juegos de tarjetas de comercio para estadísticas  ( Trading card game database schema for statistics )
Este esquema de base de datos se utilizará junto con varios sistemas relacionados con un juego de cartas de comercio en línea, principalmente para almacenamie...

Escribí el script a continuación para cargar los datos obtenidos del Archivo de Twitter JSON en archive.org en una base de datos PostgreSQL. Estoy buscando ...

10  Notificador de criptoCurencia - Vamos a enriquecemos (o al menos lo intentemos)  ( Cryptocurrency notifier lets get rich or at least lets try )
Todos sabemos que en el último período, las criptiCurencia han marcado la época de la próxima Revolución Financiera. Teniendo eso en mente, pensé que sería út...

2  Script de migración de la base de datos  ( Database migration script )
Estoy trabajando en un script de migración de la base de datos escrito en Python, que tomará datos de una base de datos MySQL e insertará en una base de datos...

1  Importando archivos de marcas  ( Importing markdown files )
Estoy construyendo una aplicación de rieles que, entre otras cosas, importan los archivos de marca de texto como publicaciones de blogs. La idea es que la ver...

2  Análisis de datos de Big JSON Field y Geocode Services luego almacenar a PostgreSQL utilizando PsyCOPG2 en lugar de Django-ORM  ( Parsing data from big json field and geocode services then store to postgresql u )
Este código funciona, pero mi jefe me dijo que es un código muy malo, y no quiero desplegarlo. Es mi primera vez que trabaje como programador y tengo al menos...

6  PostgreSQL DataTypes para LIBPQ en C ++  ( Postgresql datatypes for libpq in c )
Siguiendo de mi pregunta anterior: PostgreSQL ORM muy simple en C ++ utilizando LIBPQ (TLDR; Estoy creando un conjunto de clases de ayuda para trabajar con ...