Je conçois une table dans SQL Server 2008 qui stockera une liste d'utilisateurs et une coordonnée Google Maps (longitude et latitude).
Aurai-je besoin de deux champs ou est-ce possible de le faire avec 1?
Quel est le type de données le meilleur (ou le plus courant) à utiliser pour stocker ce type de données?
Je ne connais pas la réponse pour SQL Server mais ...
Dans MySQL, enregistrez-le sous
FLOAT( 10, 6 )
Ceci est la recommandation officielle de la documentation des développeurs Google .
la source
lat
et leslng
performances sont supérieuresgeorgraphy
, même avec des index à haute densité dans SQL 2014. Par exemple: find all point is withing a rectangle. Seulement je ne suis pas sûr, je vois que Google Maps utilise maintenant 7 au lieu de 6 chiffres?La façon dont je le fais: je stocke la latitude et la longitude , puis j'ai une troisième colonne qui est un type de géographie dérivée automatique des deux premières colonnes. Le tableau ressemble à ceci:
Cela vous donne la flexibilité des requêtes spatiales sur la colonne geoPoint et vous pouvez également récupérer les valeurs de latitude et de longitude lorsque vous en avez besoin pour l'affichage ou l'extraction à des fins csv.
la source
Point
au lieu deSTGeomFromText
. Par exemple:[geography]::Point([Latitude], [Longitude], 4326)
.Je déteste être à l'opposé de ceux qui ont dit "voici un nouveau type, utilisons-le". Les nouveaux types spatiaux de SQL Server 2008 ont certains avantages, à savoir l'efficacité, mais vous ne pouvez pas dire aveuglément toujours utiliser ce type. Cela dépend vraiment de certains problèmes de vue d'ensemble.
À titre d'exemple, l'intégration. Ce type a un type équivilent dans .Net - mais qu'en est-il de l'interopérabilité? Qu'en est-il de la prise en charge ou de l'extension des anciennes versions de .Net? Qu'en est-il d'exposer ce type à travers la couche de service à d'autres plates-formes? Qu'en est-il de la normalisation des données - peut-être êtes-vous intéressé par lat ou long en tant qu'éléments d'information autonomes. Peut-être avez-vous déjà écrit une logique métier complexe pour gérer long / lat.
Je ne dis pas que vous ne devriez pas utiliser le type spatial - dans de nombreux cas, vous devriez le faire. Je dis simplement que vous devriez poser des questions plus critiques avant de vous engager dans cette voie. Pour que je réponde plus précisément à votre question, j'aurais besoin d'en savoir plus sur votre situation spécifique.
Le stockage de long / lat séparément ou dans un type spatial sont deux solutions viables, et l'une peut être préférable à l'autre en fonction de vos propres circonstances.
la source
Ce que vous voulez faire est de stocker la latitude et la longitude en tant que nouveau type spatial SQL2008 -> GEOGRAPHIE.
Voici une capture d'écran d'une table, que j'ai.
texte alternatif http://img20.imageshack.us/img20/6839/zipcodetable.png
Dans ce tableau, nous avons deux champs qui stockent des données géographiques.
La principale raison pour laquelle vous voulez l'enregistrer dans la base de données en tant que type GEOGRAPHY est que vous pouvez ensuite tirer parti de toutes les méthodes SPATIALES -> par exemple. Point en poly, distance entre deux points, etc.
BTW, nous utilisons également l'API Google Maps pour récupérer les données lat / long et les stocker dans notre base de données Sql 2008 - donc cette méthode fonctionne.
la source
SQL Server prend en charge les informations spatiales. Vous pouvez en savoir plus sur http://www.microsoft.com/sqlserver/2008/en/us/spatial-data.aspx .
Alternativement, vous pouvez stocker les informations sous forme de deux champs de base, généralement un flottant est le type de données standard signalé par la plupart des appareils et est suffisamment précis pour un pouce ou deux - plus que suffisant pour Google Maps.
la source
La latitude et la longitude de google Maps doivent être stockées en tant que données Point (note P majuscule) dans le serveur SQL sous le type de données géographie.
En supposant que vos données actuelles sont stockées dans une table en
Sample
tant que varchar sous les colonneslat
et que lalon
requête ci-dessous vous aidera à vous convertir en géographiePS: la prochaine fois que vous effectuez une sélection sur cette table avec des données géographiques, en dehors de l'onglet Résultats et Messages, vous obtiendrez également l'onglet Résultats spatiaux comme ci-dessous pour la visualisation
la source
Si vous utilisez Entity Framework 5 <, vous pouvez utiliser
DbGeography
. Exemple de MSDN:https://msdn.microsoft.com/en-us/library/hh859721(v=vs.113).aspx
Quelque chose avec lequel j'ai eu du mal, puis j'ai commencé à utiliser,
DbGeography
c'était lecoordinateSystemId
. Voir la réponse ci-dessous pour une excellente explication et la source du code ci-dessous.https://stackoverflow.com/a/25563269/3850405
la source
Si vous voulez simplement le remplacer par une URL, je suppose qu'un champ ferait l'affaire - vous pouvez donc former une URL comme
mais comme il s'agit de deux données, je les stocke dans des champs séparés
la source
Stockez les deux en tant que flottant et utilisez des mots clés uniques dessus.
la source
House A
et déménage dansHouse B
la maison où vivait Alice. Bientôt, Bob ne pourra pas enregistrer son adresse (emplacement), car Alice n'a pas encore mis à jour la sienne - ou ne le fera jamais.