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
vote

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


Relacionados problema

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...

5  Cargando el archivo Twitter JSON de 40GB Twitter de Archive.org y cargue en PostgreSQL  ( Loading 40gb twitter json tar file from archive org and load into postgresql ) 
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 ...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos