Estoy diseñando una tabla en SQL Server 2008 que almacenará una lista de usuarios y una coordenada de Google Maps (longitud y latitud).
¿Necesitaré dos campos o se puede hacer con 1?
¿Cuál es el mejor (o el más común) tipo de datos a utilizar para almacenar este tipo de datos?
No sé la respuesta para SQL Server pero ...
En MySQL guárdelo como
FLOAT( 10, 6 )
Esta es la recomendación oficial de la documentación para desarrolladores de Google .
fuente
lat
ylng
superangeorgraphy
, incluso con índices de alta densidad en SQL 2014. Por ejemplo: encontrar todos los puntos está dentro de un rectángulo. Solo que no estoy seguro, veo que Google Maps ahora usa 7 en lugar de 6 dígitos.La forma en que lo hago: almaceno la latitud y la longitud y luego tengo una tercera columna que es un tipo de geografía derivada automáticamente de las primeras dos columnas. La tabla se ve así:
Esto le brinda la flexibilidad de las consultas espaciales en la columna geoPoint y también puede recuperar los valores de latitud y longitud cuando los necesite para mostrarlos o extraerlos con fines de csv.
fuente
Point
lugar deSTGeomFromText
. Por ejemplo:[geography]::Point([Latitude], [Longitude], 4326)
.Odio ser contrario a aquellos que dijeron "aquí hay un nuevo tipo, usémoslo". Los nuevos tipos espaciales de SQL Server 2008 tienen algunas ventajas: la eficiencia, sin embargo, no se puede decir ciegamente que siempre use ese tipo. Realmente depende de algunos problemas de imagen más amplios.
Como ejemplo, integración. Este tipo tiene un tipo equivalente en .Net, pero ¿qué pasa con la interoperabilidad? ¿Qué hay de admitir o ampliar versiones anteriores de .Net? ¿Qué hay de exponer este tipo a través de la capa de servicio a otras plataformas? ¿Qué pasa con la normalización de datos? Tal vez le interese la latitud o la longitud como piezas de información independientes. Quizás ya haya escrito una lógica empresarial compleja para manejar long / lat.
No estoy diciendo que no debas usar el tipo espacial, en muchos casos deberías hacerlo. Solo digo que debería hacer algunas preguntas más críticas antes de seguir ese camino. Para poder responder a su pregunta con mayor precisión, necesitaría saber más sobre su situación específica.
Almacenar long / lat por separado o en un tipo espacial son soluciones viables, y una puede ser preferible a la otra dependiendo de sus propias circunstancias.
fuente
Lo que desea hacer es almacenar la latitud y la longitud como el nuevo tipo espacial SQL2008 -> GEOGRAFÍA.
Aquí hay una captura de pantalla de una mesa, que tengo.
texto alternativo http://img20.imageshack.us/img20/6839/zipcodetable.png
En esta tabla, tenemos dos campos que almacenan datos geográficos.
La razón principal por la que desea guardarlo en la base de datos como un tipo GEOGRAPHY es para que pueda aprovechar todos los métodos ESPACIALES de él -> ej. Punto en Poli, Distancia entre dos puntos, etc.
Por cierto, también usamos la API de Google Maps para recuperar datos lat / long y almacenarlos en nuestra base de datos Sql 2008, por lo que este método funciona.
fuente
SQL Server tiene soporte para información relacionada con el espacio. Puede ver más en http://www.microsoft.com/sqlserver/2008/en/us/spatial-data.aspx .
Alternativamente, puede almacenar la información como dos campos básicos, por lo general, un flotante es el tipo de datos estándar informado por la mayoría de los dispositivos y es lo suficientemente preciso para una pulgada o dos, más que adecuado para Google Maps.
fuente
La latitud y la longitud de Google Maps deben almacenarse como datos de punto (nota P mayúscula) en el servidor SQL bajo el tipo de datos geográficos.
Suponiendo que sus datos actuales están almacenados en una tabla
Sample
como varchar debajo de las columnaslat
ylon
, la consulta a continuación lo ayudará a convertir a geografíaPD: La próxima vez que haga una selección en esta tabla con datos geográficos, además de la pestaña Resultados y Mensajes, también obtendrá la pestaña Resultados espaciales como la siguiente para visualización
fuente
Si está usando Entity Framework 5 <puede usar
DbGeography
. Ejemplo de MSDN:https://msdn.microsoft.com/en-us/library/hh859721(v=vs.113).aspx
Algo con lo que luché y luego comencé a usar
DbGeography
fue elcoordinateSystemId
. Consulte la respuesta a continuación para obtener una excelente explicación y fuente del código a continuación.https://stackoverflow.com/a/25563269/3850405
fuente
Si solo va a sustituirlo en una URL, supongo que un campo sería suficiente, para que pueda formar una URL como
pero como son dos datos, los almacenaría en campos separados
fuente
Almacene ambos como flotantes y use palabras clave únicas en ellos.
fuente
House A
y se mudará aHouse B
la casa donde solía vivir Alice. Pronto Bob no podrá guardar su dirección (ubicación), porque Alice no actualizó la suya todavía, o nunca lo hará.