Immer wieder habe ich das Problem, dass ich haufenweise Adressen habe und diese bspw. in einem Report (Reporting Services) verarbeiten muss. D.h. ich brauche Geo-Daten und will diese natürlich nicht Datensatz für Datensatz in Längen- und Breitengrad übersetzen. In diesem Artikel will ich kurz beschreiben, wie eine CSV Datei mit Adressen automatisch mit den Google Webdiensten in Längen- und Breitengrad übersetzt wird und diese Daten dann im SQL Server wiederverwendet werden können.
Beispiel: Eine CSV Datei mit verschiedenen Imbiss Buden aus Koblenz (via den Gelben Seiten abgefragt):
Via PHP wurde nun die Datei zeilenweise ausgelesen und die Adresse wurde an Google gesendet:
Die Ausgabe des Scripts ergibt folgendes:
Diese Daten können nun super per SSIS in die Datenbank eingelesen werden – natürlich kann man auch gleich die Daten in den SQL Server, bzw. die Datenbank schreiben. Die Tabelle dazu:
Und nun brauchen wir noch eine Tabelle wo wir unseren eigenen Standort reinschreiben:
Nun haben wir eine Tabelle in der die Adressen sind und auch eine Tabelle wo unser Standort enthalten ist. Über je ein Update Statement lassen wir gleich das GEO-Feld in den beiden Tabellen füllen (aus Längen- und Breitengrad) und über die STDistance Funktion können wir dann die jeweilige Entfernung zwischen dem Standort und der jeweiligen Adresse finden – so finden wir den nächsten Imbiss :-)
UPDATE dbo.Orte SET geo = GEOGRAPHY::STPointFromText(‚POINT(‚ + CONVERT(VARCHAR, laengengrad) + ‚ ‚ + CONVERT(VARCHAR, breitengrad) + ‚)‘,4326)
UPDATE meinStandort SET geo = GEOGRAPHY::STPointFromText(‚POINT(‚ + CONVERT(VARCHAR, laengengrad) + ‚ ‚ + CONVERT(VARCHAR, breitengrad) + ‚)‘,4326)
SELECT name, orte.adresse, orte.geo.STDistance(ms.geo) As [Entfernung In Meter] FROM dbo.Orte CROSS JOIN meinStandort ms