Ich entwerfe eine Tabelle in SQL Server 2008, in der eine Liste der Benutzer und eine Google Maps-Koordinate (Längen- und Breitengrad) gespeichert werden.
Benötige ich zwei Felder oder kann es mit 1 gemacht werden?
Was ist der beste (oder häufigste) Datentyp zum Speichern dieser Art von Daten?
Ich kenne die Antwort für SQL Server nicht, aber ...
In MySQL speichern Sie es als
FLOAT( 10, 6 )
Dies ist die offizielle Empfehlung aus der Google-Entwicklerdokumentation .
quelle
lat
undlng
übertreffengeorgraphy
auch bei hohen Dichte Indizes in SQL 2014. Zum Beispiel: Finden Sie alle Punkt ein Rechteck ist withing. Nur bin ich mir nicht sicher, ich sehe, dass Google Maps jetzt 7 statt 6 Ziffern verwendet?So mache ich das: Ich speichere den Breiten- und Längengrad und habe dann eine dritte Spalte, die ein automatisch abgeleiteter Geografietyp der ersten beiden Spalten ist. Der Tisch sieht so aus:
Dies gibt Ihnen die Flexibilität von räumlichen Abfragen in der geoPoint-Spalte und Sie können auch die Breiten- und Längengrade abrufen, wenn Sie sie zum Anzeigen oder Extrahieren für CSV-Zwecke benötigen.
quelle
Point
statt zu verwendenSTGeomFromText
. Zum Beispiel :[geography]::Point([Latitude], [Longitude], 4326)
.Ich hasse es, ein Gegenspieler zu denen zu sein, die sagten "hier ist ein neuer Typ, lass es uns benutzen". Die neuen räumlichen SQL Server 2008-Typen haben einige Vorteile - nämlich die Effizienz. Sie können jedoch nicht blind sagen, dass Sie diesen Typ immer verwenden. Es hängt wirklich von einigen größeren Problemen ab.
Als Beispiel Integration. Dieser Typ hat einen äquivalenten Typ in .Net - aber was ist mit Interop? Was ist mit der Unterstützung oder Erweiterung älterer Versionen von .Net? Wie wäre es, diesen Typ über die Service-Schicht hinweg anderen Plattformen auszusetzen? Was ist mit der Normalisierung von Daten? Vielleicht interessieren Sie sich für lat oder long als eigenständige Informationen. Vielleicht haben Sie bereits eine komplexe Geschäftslogik für Long / Lat geschrieben.
Ich sage nicht, dass Sie den räumlichen Typ nicht verwenden sollten - in vielen Fällen sollten Sie. Ich sage nur, dass Sie einige kritischere Fragen stellen sollten, bevor Sie diesen Weg gehen. Damit ich Ihre Frage am genauesten beantworten kann, muss ich mehr über Ihre spezifische Situation wissen.
Long / Lat separat oder in einem räumlichen Typ zu speichern, sind beide praktikable Lösungen, und je nach Ihren eigenen Umständen kann eine der anderen vorzuziehen sein.
quelle
Sie möchten den Breiten- und Längengrad als neuen SQL2008-Raumtyp -> GEOGRAPHIE speichern.
Hier ist ein Screenshot eines Tisches, den ich habe.
Alternativtext http://img20.imageshack.us/img20/6839/zipcodetable.png
In dieser Tabelle haben wir zwei Felder, in denen Geografiedaten gespeichert sind.
Der Hauptgrund, warum Sie es als GEOGRAPHY-Typ in der Datenbank speichern möchten, besteht darin, dass Sie dann alle SPATIAL-Methoden nutzen können -> z. Punkt in Poly, Abstand zwischen zwei Punkten usw.
Übrigens verwenden wir auch die Google Maps-API, um Lat / Long-Daten abzurufen und diese in unserer SQL 2008-Datenbank zu speichern. Diese Methode funktioniert also.
quelle
SQL Server unterstützt räumliche Informationen. Weitere Informationen finden Sie unter http://www.microsoft.com/sqlserver/2008/en/us/spatial-data.aspx .
Alternativ können Sie die Informationen als zwei grundlegende Felder speichern. In der Regel ist ein Float der Standarddatentyp, der von den meisten Geräten gemeldet wird. Er ist genau genug für ein oder zwei Zoll - mehr als ausreichend für Google Maps.
quelle
Latitut und Längengrad von Google Maps sollten als Punktdaten (Notizkapital P) in SQL Server unter dem Datentyp Geografie gespeichert werden.
In einer Tabelle Ihre aktuellen Daten Unter der Annahme , gespeichert
Sample
als varchar unter Spaltenlat
undlon
unter Abfrage werden Ihnen helfen, Geographie konvertierenPS: Wenn Sie das nächste Mal in dieser Tabelle Geografiedaten auswählen, wird neben der Registerkarte Ergebnisse und Nachrichten auch die Registerkarte Räumliche Ergebnisse wie unten zur Visualisierung angezeigt
quelle
Wenn Sie Entity Framework 5 <verwenden, können Sie verwenden
DbGeography
. Beispiel aus MSDN:https://msdn.microsoft.com/en-us/library/hh859721(v=vs.113).aspx
Etwas, mit dem ich zu kämpfen hatte, als ich anfing, es zu benutzen,
DbGeography
war dascoordinateSystemId
. In der Antwort unten finden Sie eine hervorragende Erklärung und Quelle für den folgenden Code.https://stackoverflow.com/a/25563269/3850405
quelle
Wenn Sie es nur durch eine URL ersetzen möchten, reicht vermutlich ein Feld aus - Sie können also eine URL wie diese erstellen
Da es sich jedoch um zwei Daten handelt, würde ich sie in separaten Feldern speichern
quelle
Speichern Sie beide als float und verwenden Sie eindeutige Schlüsselwörter für them.i.em
quelle
House A
, und ziehtHouse B
in dieses um. Bald wird Bob seine Adresse (Ort) nicht mehr speichern können, da Alice ihre noch nicht aktualisiert hat - oder nie aktualisieren wird.