Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
Syndicate_Admin
Administrator
Administrator

Mapear múltiples puntos a la distancia de múltiples sitios

Hola a todos

Tengo una tabla de estadísticas de delitos y una tabla de sitios de CCTV, vea tablas de ejemplo a continuación. Me gustaría mapear los crímenes alrededor de cada sitio de CCTV, por ejemplo, dentro de los 500 m de cada sitio como se muestra a continuación (aunque no con las etiquetas del sitio, eso fue solo para aclarar),

Puedo aplicar el cálculo de haversina (como se muestra en Phil Seamark en la imagen de abajo). Supongo que la mejor opción es agregar una columna calculada a la tabla de delitos. Lo intenté a continuación, pero obtengo una serie de errores. También tendré que agregar criterios para seleccionar el sitio de CCTV más cercano en caso de que haya dos con 500 m, pero pensé que me centraría en la primera parte.

¿Alguna idea sobre mi enfoque o mi columna calculada?

Sitios de CCTV =
Si(
CALCULAR(
12742000 * SALADO((SQRT(0.5 - COS((CCTV(Latitud)) * DIVIDIR( Pi(), 180 ))/2 + COS(CCTV (Latitud) * DIVIDIR( Pi(), 180 )) * COS(Crimen[Latitud] * DIVIDIR( Pi(), 180 )) * (1-COS((Crimen[Longitud]- CCTV(Longitud) * DIVIDIR( Pi(), 180 )))/2))) < 500), CCTV (ID),"")

Drewz_1-1660417940622.png

Instalación de CCTV
ID de cámaraLargoAñosAño de instalación
201-36.9722174.78672019
202-36.9651174.7952017
203-36.9665174.80852018
204-36.9519174.83852020
205-36.9656174.81562019

Estadísticas de criminalidad
IdentificaciónLargoAñosTipo de delitoAñoColumna calculada
1174.7902527-36.97949982Propiedad2015
2174.7902527-36.97949982Herida2021203
3174.8324585-36.96062088Cibernética2015
4174.8324585-36.96062088Herida2017
5174.8353424-36.93717957Herida2020
6174.8353424-36.93717957Herida2016201
7174.8353424-36.93717957Cibernética2020
8174.8505554-36.9417305Cibernética2019
9174.8505554-36.9417305Cibernética2018
10174.8505554-36.9417305Propiedad2018
11174.7889252-37.00097275Herida2020205
12174.7889252-37.00097275Propiedad2016
13174.7889252-37.00097275Propiedad2018
14174.8352814-36.93664932Herida2019
15174.7895508-36.97363281Herida2018202
16174.7895508-36.97363281Propiedad2016202
17174.7895508-36.97363281Propiedad2017
18174.8317566-36.96046066Herida2022
19174.8317566-36.96046066Cibernética2021
20174.8399353-36.94024658Herida2017

Drewz_5-1660419372213.png

11 REPLIES 11
Syndicate_Admin
Administrator
Administrator

ver mensaje 6

Ahh, sí, me perdí el mensaje 6. Con grandes conjuntos de datos, obtengo algunas bandas inusuales cuando especifico la distancia de 200 m (ver imagen a continuación). Además, la fórmula de haversina que utilizó da resultados de distancia bastante diferentes. Al menos un factor de 2 diferentes. Pensé que serían similares. Revisé la fórmula original midiendo una distancia de Google Maps, y me dio un resultado coincidente dentro de 1 decimal.

Drewz_0-1660636298025.png

Refactoricé la fórmula a su formato más común, a ver si eso es mejor.

DC2 = 
var a = summarize(CCTV,CCTV[Camera ID],CCTV[Lat],CCTV[Long],"Dist",12742000 * asin(sqrt(power(sin(RADIANS(CCTV[Lat] - Crimes[Lat]) / 2), 2) +  power(sin(RADIANS(CCTV[Long] - Crimes[Long]) / 2), 2) *  cos(RADIANS(CCTV[Lat])) * cos(RADIANS(Crimes[Lat])))))
var b = TOPN(1,a,[Dist],ASC)
return CONCATENATEX(b,[Dist])

Es probable que su anillamiento se deba a elegir una columna de la tabla incorrecta.

Perdón por la demora en responder. He estado probando lo anterior. Estaba obteniendo algunos resultados espurios, así que me quedé con la fórmula original de haversina. Eso combinado con su método "brut force it" y una cortadora de distancia funcionó. Así que, muchas gracias por su ayuda.

Idealmente, me gustaría simplificar el código para que solo tenga una columna calculada que devuelva la identificación de CCTV cuando esté a menos de 500 m de distancia. Entonces, si alguien tiene alguna sugerencia para refinar el código, sería muy bien recibido. De lo contrario, seguiré tratando de descubrir algunas opciones.

 that returns the CCTV ID when less than 500 m away. 

Solo puede decidir eso después de haber calculado la distancia. Así que no hay ninguna ventaja en tirar el resultado. Imagina que luego quieres decir "menos de 1000 m", etc. Mantenga los valores reales.

Una cosa que puede considerar es deshacerse de la Haversina y hacer el cálculo simple de tierra plana basado en el promedio de metros por grado para su área de latitud y longitud. Mucho más fácil de calcular.

Syndicate_Admin
Administrator
Administrator

1. ¿Cuáles son los errores?

2. ¿No querrías esto como una medida, en lugar de una columna calculada?

Hi Ibendin,

No está reconociendo las referencias de longitud / latitud para cada tabla. Incluso para el Crimen [Latitud] y Crimen [Longitud] parece estar queriendo una medida. Puse una captura de pantalla a continuación. Creo que tiene algo que ver con el hecho de que las tablas no están relacionadas y necesito hacer una operación fila por fila.

Hubiera pensado que una columna calculada sería mejor para una operación fila por fila. Además, puede procesar la información durante la actualización, lo que significa que debería responder más rápido (mi comprensión básica). Pero obviamente mi DAX no está bien.

Básicamente, solo quiero agregar un sitio de CCTV en la columna calculada si está dentro de un cierto radio de la ubicación del crimen. En mi cabeza tiene sentido, pero no estoy seguro de cómo hacer que funcione con tablas no relacionadas.

Drewz_0-1660534131311.png

Puede combinar ambas tablas. Agregue un identificador de tipo de ubicación para distinguir entre cámaras y delitos.

Combinado = UNIÓN(SELECCIONARCOLUMNAS(CCTV,"Años",[Años],"Lon",[Largo],"Tipo de ubicación","Cámara","Tipo de crimen",ESPACIO EN BLANCO(),"ID",[ID de cámara]),SELECCIONARCOLUMNAS(Crímenes,"Años",[Años],"Lon",[Largo],"Tipo de ubicación","Crimen","Tipo de crimen",[Tipo de delito],"ID",[ID]))
También veo un mensaje de error muy interesante: su tabla de muestra de CCTV tiene los encabezados de columna incorrectos.
lbendlin_0-1660566732680.png

ver adjunto

Hi Ibendin,

gracias por el ejemplo. Estoy menos preocupado por mostrar la ubicación de CCTV y más interesado en seleccionar los delitos dentro de un cierto radio basado en el cálculo de haversine. Eventualmente, quiero acampar las tasas de criminalidad dentro de un radio de ubicaciones de CCTV vs tasas de criminalidad más allá de ese radio para ver si hay una diferencia. Creo que para hacer eso, necesitaré tener una columna calculada en la tabla de delitos que agregue un sitio de CCTV si está dentro de un radio. Cualquier pensamiento.

Ah, y gracias a los encabezados.

Saludos Andrés

Lo forzaría brutamente, calcularía la distancia desde la ubicación de un crimen a todas las ubicaciones de la cámara y luego elegiría la más cercana. Almacenar esa distancia probablemente también será útil.

Lol @ "fuerza bruta". Estoy abierto a cualquier cosa. aunque para ubicaciones rurales la ubicación de CCTV más cercana puede estar a kilómetros de distancia. Pero entonces podría filtrarlos. Entonces, ¿cómo se vería la "fuerza bruta"? ¿Sería una columna calculada añadida a la tabla Crimen?

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.