Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Que unidades devuelve GLength?

Estas en el tema de Que unidades devuelve GLength? en el foro de Mysql en Foros del Web. Hola ! Estoy peleando bastante con los POINT en MySQL, hay muy poca informacion, y para colmo hasta el ejemplo de la documentacion esta mal: ...
  #1 (permalink)  
Antiguo 01/02/2011, 14:56
 
Fecha de Ingreso: mayo-2005
Mensajes: 284
Antigüedad: 19 años
Puntos: 11
Que unidades devuelve GLength?

Hola !
Estoy peleando bastante con los POINT en MySQL, hay muy poca informacion, y para colmo hasta el ejemplo de la documentacion esta mal:
http://dev.mysql.com/tech-resources/...ith-mysql.html
Código MySQL:
Ver original
  1.   c.cab_driver,
  2.                                              AsBinary(a.address_loc)))))
  3.     AS distance
  4. FROM cab c, address a
  5. WHERE a.address = 'Foobar street 110'

No hay ninguna direccion Foobar street 110, y lo mas importante, no hay que usar AsBinary sino devuelve siempre NULL.

Pero más allá de eso, en qué unidades nos devuelve la distancia GLength??

Encontré un ejemplo sencillo:
Código MySQL:
Ver original
  1.    'LINESTRING(-67.8246 -10.0073,-67.8236 -10.0082)', 4326))
Eso devuelve:
0.00134536240471071

Pero en metros supuestamente son 147m
Entonces??? :S

Alguien sabe como hacer para obtener en metros los resultados de las distancias calculadas con GLength?

Saludos !!
Enrique.
  #2 (permalink)  
Antiguo 01/02/2011, 21:28
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Que unidades devuelve GLength?

En realidad, tanto el manual como el artículo mencionado están bien. Esa función te devuelve exactamente lo que te dice:
Cita:
GLength
Devuelve la longitud del valor LineString ls como un número de doble precisión en su sistema de referencia espacial asociado.

Código MySQL:
Ver original
  1. mysql> SET @ls = 'LineString(1 1,2 2,3 3)';
  2. +----------------------------+
  3. +----------------------------+
  4. |            2.8284271247462 |
  5. +----------------------------+
Lo que no estás teniendo en cuenta es lo que significa en su sistema de referencia espacial asociado. Eso significa que el valor devuelto está en la misma representación usada con los valores que se ingresaron.
Esto significa que lo que debes hacer es convertir ese valor en una medida de kilómetros o metros para obtener el valor real. Si cada grado representa aproximadamente 111 Km, el resultado de la conversión sería de cerca de 149 metros...
Metros más, metros menos...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 02/02/2011, 06:12
 
Fecha de Ingreso: mayo-2005
Mensajes: 284
Antigüedad: 19 años
Puntos: 11
Respuesta: Que unidades devuelve GLength?

Cita:
Iniciado por gnzsoloyo Ver Mensaje
En realidad, tanto el manual como el artículo mencionado están bien. Esa función te devuelve exactamente lo que te dice:

Lo que no estás teniendo en cuenta es lo que significa en su sistema de referencia espacial asociado. Eso significa que el valor devuelto está en la misma representación usada con los valores que se ingresaron.
Esto significa que lo que debes hacer es convertir ese valor en una medida de kilómetros o metros para obtener el valor real. Si cada grado representa aproximadamente 111 Km, el resultado de la conversión sería de cerca de 149 metros...
Metros más, metros menos...
Gracias Gonzalo, ahora entiendo...
No tiene una funcion especifica para lo que es calculo de coordenadas geográficas? en toda la documentacion se cansan de nombrar a GIS y tenemos que hacer nosotros la conversión a una unidad metrica? que para colmo es aproximada? (muy aproximada).
De donde sacamos el valor que cada grado son 111km? si tenemos que averiguar eso antes siempre mejor lo calculo a mano...
Pero lo peor es que para grandes distancias ese valor supongo dista mucho de ser constante asique la aproximacion va a ser bastante mala.
Por todo esto, estimo que debe haber una forma sencilla y eficaz de convertir esa distancia del espacio de coordenadas geográficas al espacio métrico.

Me queda la duda también sobre el calculo que está haciendo MySQL para obtener la distancia, en tu ejemplo dibujaste una linea con 3 puntos, la longitud de esa linea dio 2.28 porque se uso en el calculo un espacio cartesiano plano, pero en el caso de coordenadas geográficas MySQL no debería usar un plano cartesiano para calcular las distancias.

La verdad es que ahora estoy calculandolo "a mano", es decir con una consulta que calcula los cosenos y senos etc etc, y funciona bien pero me parece un desperdicio y no se que va a pasar si la base crece mucho.
Sabes como calcular distancias de coordenadas geográficas en metros o kilómetros con los POINT de mySQL?

Saludos !!!
Enrique
PD: sigo sosteniendo que el ejemplo de la documentacion esta mal, si te fijas en la web crea las tablas e introduce datos, y ninguno de los datos introducidos tiene la direccion que luego busca, asique obviamente no va a devolver nunca nada.
Pero corrigiendo eso la distancia me devuelve siempre NULL, buscando encontre que a muchos les pasaba y que justamente la solucion es quitar el AsBinary en el ejemplo.

Etiquetas: unidad
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:04.