{"id":364,"date":"2014-06-21T15:35:38","date_gmt":"2014-06-21T13:35:38","guid":{"rendered":"http:\/\/www.flip-design.de\/?p=364"},"modified":"2014-06-21T20:47:12","modified_gmt":"2014-06-21T18:47:12","slug":"automatisiert-adressen-in-geo-daten-umwandeln-und-die-entfernung-zu-einem-standort-berechnen","status":"publish","type":"post","link":"https:\/\/www.flip-design.de\/?p=364","title":{"rendered":"Automatisiert Adressen in Geo-Daten umwandeln und die Entfernung zu einem Standort berechnen"},"content":{"rendered":"<p><a href=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2012\/11\/Weltkugel.gif\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft  wp-image-229\" src=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2012\/11\/Weltkugel.gif\" alt=\"Weltkugel\" width=\"83\" height=\"84\" srcset=\"https:\/\/www.flip-design.de\/wp-content\/uploads\/2012\/11\/Weltkugel.gif 335w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2012\/11\/Weltkugel-150x150.gif 150w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2012\/11\/Weltkugel-297x300.gif 297w\" sizes=\"(max-width: 83px) 100vw, 83px\" \/><\/a>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\u00fcrlich nicht Datensatz f\u00fcr Datensatz in L\u00e4ngen- und Breitengrad \u00fcbersetzen. In diesem Artikel will ich kurz beschreiben, wie eine CSV Datei mit Adressen automatisch mit den Google Webdiensten in L\u00e4ngen- und\u00a0Breitengrad \u00fcbersetzt wird und diese Daten dann im SQL Server wiederverwendet werden k\u00f6nnen.<\/p>\n<p>Beispiel: Eine CSV Datei mit verschiedenen Imbiss Buden aus Koblenz (via den Gelben Seiten abgefragt):<\/p>\n<p><a href=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2014\/06\/2014-06-21_15-17-21.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-365 size-medium\" src=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2014\/06\/2014-06-21_15-17-21-300x74.png\" alt=\"2014-06-21_15-17-21\" width=\"300\" height=\"74\" srcset=\"https:\/\/www.flip-design.de\/wp-content\/uploads\/2014\/06\/2014-06-21_15-17-21-300x74.png 300w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2014\/06\/2014-06-21_15-17-21-624x154.png 624w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2014\/06\/2014-06-21_15-17-21.png 683w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Via PHP wurde nun die Datei zeilenweise ausgelesen und die Adresse wurde an Google gesendet:<a href=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2014\/06\/2014-06-21_15-20-19.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-full wp-image-366\" src=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2014\/06\/2014-06-21_15-20-19.png\" alt=\"2014-06-21_15-20-19\" width=\"841\" height=\"500\" srcset=\"https:\/\/www.flip-design.de\/wp-content\/uploads\/2014\/06\/2014-06-21_15-20-19.png 841w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2014\/06\/2014-06-21_15-20-19-300x178.png 300w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2014\/06\/2014-06-21_15-20-19-624x370.png 624w\" sizes=\"(max-width: 841px) 100vw, 841px\" \/><\/a><\/p>\n<p>Die Ausgabe des Scripts ergibt folgendes:<a href=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2014\/06\/2014-06-21_15-22-20.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-full wp-image-367\" src=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2014\/06\/2014-06-21_15-22-20.png\" alt=\"2014-06-21_15-22-20\" width=\"808\" height=\"159\" srcset=\"https:\/\/www.flip-design.de\/wp-content\/uploads\/2014\/06\/2014-06-21_15-22-20.png 808w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2014\/06\/2014-06-21_15-22-20-300x59.png 300w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2014\/06\/2014-06-21_15-22-20-624x122.png 624w\" sizes=\"(max-width: 808px) 100vw, 808px\" \/><\/a><\/p>\n<p>Diese Daten k\u00f6nnen nun super per SSIS in die Datenbank eingelesen werden &#8211; nat\u00fcrlich kann man auch gleich die Daten in den SQL Server, bzw. die Datenbank schreiben. Die Tabelle dazu:<br \/>\n<a href=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2014\/06\/2014-06-21_15-24-48.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-368 size-medium\" src=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2014\/06\/2014-06-21_15-24-48-300x212.png\" alt=\"2014-06-21_15-24-48\" width=\"300\" height=\"212\" srcset=\"https:\/\/www.flip-design.de\/wp-content\/uploads\/2014\/06\/2014-06-21_15-24-48-300x212.png 300w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2014\/06\/2014-06-21_15-24-48.png 596w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Und nun brauchen wir noch eine Tabelle wo wir unseren eigenen Standort reinschreiben:<a href=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2014\/06\/2014-06-21_15-25-29.png\"><br \/>\n<\/a><a href=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2014\/06\/2014-06-21_15-25-29.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-369 size-medium\" src=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2014\/06\/2014-06-21_15-25-29-243x300.png\" alt=\"2014-06-21_15-25-29\" width=\"243\" height=\"300\" srcset=\"https:\/\/www.flip-design.de\/wp-content\/uploads\/2014\/06\/2014-06-21_15-25-29-243x300.png 243w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2014\/06\/2014-06-21_15-25-29.png 392w\" sizes=\"(max-width: 243px) 100vw, 243px\" \/><\/a><\/p>\n<p>Nun haben wir eine Tabelle in der die Adressen sind und auch eine Tabelle wo unser Standort enthalten ist. \u00dcber je ein Update Statement lassen wir gleich das GEO-Feld in den beiden Tabellen f\u00fcllen (aus L\u00e4ngen- und Breitengrad) und \u00fcber die STDistance Funktion k\u00f6nnen wir dann die jeweilige Entfernung zwischen dem Standort und der jeweiligen Adresse finden &#8211; so finden wir den n\u00e4chsten Imbiss :-)<\/p>\n<p>UPDATE dbo.Orte <span style=\"color: #0000ff; font-family: Consolas; font-size: small;\"><span style=\"color: #0000ff; font-family: Consolas; font-size: small;\"><span style=\"color: #0000ff; font-family: Consolas; font-size: small;\">SET<\/span><\/span><\/span><span style=\"font-family: Consolas; font-size: small;\"><span style=\"font-family: Consolas; font-size: small;\"> geo = <\/span><\/span><span style=\"color: #0000ff; font-family: Consolas; font-size: small;\"><span style=\"color: #0000ff; font-family: Consolas; font-size: small;\"><span style=\"color: #0000ff; font-family: Consolas; font-size: small;\">GEOGRAPHY<\/span><\/span><\/span><span style=\"font-family: Consolas; font-size: small;\"><span style=\"font-family: Consolas; font-size: small;\">::STPointFromText(&#8218;POINT(&#8218; + CONVERT(<\/span><\/span><span style=\"color: #0000ff; font-family: Consolas; font-size: small;\"><span style=\"color: #0000ff; font-family: Consolas; font-size: small;\"><span style=\"color: #0000ff; font-family: Consolas; font-size: small;\">VARCHAR<\/span><\/span><\/span><span style=\"font-family: Consolas; font-size: small;\"><span style=\"font-family: Consolas; font-size: small;\">, laengengrad) + &#8218; &#8218; + CONVERT(<\/span><\/span><span style=\"color: #0000ff; font-family: Consolas; font-size: small;\"><span style=\"color: #0000ff; font-family: Consolas; font-size: small;\"><span style=\"color: #0000ff; font-family: Consolas; font-size: small;\">VARCHAR<\/span><\/span><\/span><span style=\"font-family: Consolas; font-size: small;\"><span style=\"font-family: Consolas; font-size: small;\">, breitengrad) + &#8218;)&#8216;,4326)<\/span><\/span><\/p>\n<p>UPDATE meinStandort <span style=\"color: #0000ff; font-family: Consolas; font-size: small;\"><span style=\"color: #0000ff; font-family: Consolas; font-size: small;\"><span style=\"color: #0000ff; font-family: Consolas; font-size: small;\">SET<\/span><\/span><\/span><span style=\"font-family: Consolas; font-size: small;\"><span style=\"font-family: Consolas; font-size: small;\"> geo = <\/span><\/span><span style=\"color: #0000ff; font-family: Consolas; font-size: small;\"><span style=\"color: #0000ff; font-family: Consolas; font-size: small;\"><span style=\"color: #0000ff; font-family: Consolas; font-size: small;\">GEOGRAPHY<\/span><\/span><\/span><span style=\"font-family: Consolas; font-size: small;\"><span style=\"font-family: Consolas; font-size: small;\">::STPointFromText(&#8218;POINT(&#8218; + CONVERT(<\/span><\/span><span style=\"color: #0000ff; font-family: Consolas; font-size: small;\"><span style=\"color: #0000ff; font-family: Consolas; font-size: small;\"><span style=\"color: #0000ff; font-family: Consolas; font-size: small;\">VARCHAR<\/span><\/span><\/span><span style=\"font-family: Consolas; font-size: small;\"><span style=\"font-family: Consolas; font-size: small;\">, laengengrad) + &#8218; &#8218; + CONVERT(<\/span><\/span><span style=\"color: #0000ff; font-family: Consolas; font-size: small;\"><span style=\"color: #0000ff; font-family: Consolas; font-size: small;\"><span style=\"color: #0000ff; font-family: Consolas; font-size: small;\">VARCHAR<\/span><\/span><\/span><span style=\"font-family: Consolas; font-size: small;\"><span style=\"font-family: Consolas; font-size: small;\">, breitengrad) + &#8218;)&#8216;,4326)<\/span><\/span><\/p>\n<p>SELECT name, orte.adresse<span style=\"font-family: Consolas; font-size: small;\"><span style=\"font-family: Consolas; font-size: small;\">, orte.geo.STDistance(ms.geo) <\/span><\/span><span style=\"color: #0000ff; font-family: Consolas; font-size: small;\"><span style=\"color: #0000ff; font-family: Consolas; font-size: small;\"><span style=\"color: #0000ff; font-family: Consolas; font-size: small;\">As<\/span><\/span><\/span><span style=\"font-family: Consolas; font-size: small;\"><span style=\"font-family: Consolas; font-size: small;\"> [Entfernung In Meter] <\/span><\/span><span style=\"color: #0000ff; font-family: Consolas; font-size: small;\"><span style=\"color: #0000ff; font-family: Consolas; font-size: small;\"><span style=\"color: #0000ff; font-family: Consolas; font-size: small;\">FROM<\/span><\/span><\/span><span style=\"font-family: Consolas; font-size: small;\"><span style=\"font-family: Consolas; font-size: small;\"> dbo.Orte <\/span><\/span>CROSS JOIN meinStandort ms<\/p>\n","protected":false},"excerpt":{"rendered":"<p>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\u00fcrlich nicht Datensatz f\u00fcr Datensatz in L\u00e4ngen- und Breitengrad \u00fcbersetzen. In diesem &hellip; <a href=\"https:\/\/www.flip-design.de\/?p=364\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":229,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0},"categories":[25,30,24,3],"tags":[],"_links":{"self":[{"href":"https:\/\/www.flip-design.de\/index.php?rest_route=\/wp\/v2\/posts\/364"}],"collection":[{"href":"https:\/\/www.flip-design.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.flip-design.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.flip-design.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.flip-design.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=364"}],"version-history":[{"count":5,"href":"https:\/\/www.flip-design.de\/index.php?rest_route=\/wp\/v2\/posts\/364\/revisions"}],"predecessor-version":[{"id":375,"href":"https:\/\/www.flip-design.de\/index.php?rest_route=\/wp\/v2\/posts\/364\/revisions\/375"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.flip-design.de\/index.php?rest_route=\/wp\/v2\/media\/229"}],"wp:attachment":[{"href":"https:\/\/www.flip-design.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=364"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.flip-design.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=364"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.flip-design.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=364"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}