CiAgICA8IS0tIExpbmtlZEluIC0tPgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICAgIF9saW5rZWRpbl9wYXJ0bmVyX2lkID0gIjEyMzUwNzMiOwogICAgICAgIHdpbmRvdy5fbGlua2VkaW5fZGF0YV9wYXJ0bmVyX2lkcyA9IHdpbmRvdy5fbGlua2VkaW5fZGF0YV9wYXJ0bmVyX2lkcyB8fCBbXTsKICAgICAgICB3aW5kb3cuX2xpbmtlZGluX2RhdGFfcGFydG5lcl9pZHMucHVzaChfbGlua2VkaW5fcGFydG5lcl9pZCk7CiAgICA8L3NjcmlwdD48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgICAgICAgKGZ1bmN0aW9uKCl7dmFyIHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IilbMF07CiAgICAgICAgICAgIHZhciBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CiAgICAgICAgICAgIGIudHlwZSA9ICJ0ZXh0L2phdmFzY3JpcHQiO2IuYXN5bmMgPSB0cnVlOwogICAgICAgICAgICBiLnNyYyA9ICJodHRwczovL3NuYXAubGljZG4uY29tL2xpLmxtcy1hbmFseXRpY3MvaW5zaWdodC5taW4uanMiOwogICAgICAgICAgICBzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGIsIHMpO30pKCk7CiAgICA8L3NjcmlwdD4KICAgIDxub3NjcmlwdD4KICAgICAgICA8aW1nIGhlaWdodD0iMSIgd2lkdGg9IjEiIHN0eWxlPSJkaXNwbGF5Om5vbmU7IiBhbHQ9IiIgc3JjPSJodHRwczovL3B4LmFkcy5saW5rZWRpbi5jb20vY29sbGVjdC8/cGlkPTEyMzUwNzMmZm10PWdpZiIgLz4KICAgIDwvbm9zY3JpcHQ+CiAgICA8IS0tIEVuZCBMaW5rZWRJbiAtLT4KICAgIA==
Generic filters
Exact matches only
Search in title
Search in excerpt
Search in content

Geoberechnungen (reale Adresszuordnung)

Im dritten Blogbeitrag zum Thema Geoberechnungen beschäftigen wir uns mit einem Beispiel einer simplen Konkurrenzanalyse mit realer Adresszuordnung mittels Geokoordinaten.

Der Einfachheit bedienen wir uns des Berliner Telefonbuchs und extrahieren die Adressen von folgenden „Fastfood”-Anbietern: Nordsee, Brezelbäckerei Ditsch, Burger King, Kamps Backshop, McDonalds und Subway. Für diese knapp 120 Datensätze lassen wir uns mit unserem Google Maps-API-Key die Geokoordinaten (Längen-/Breitengrad) der Adressdaten berechnen. Folgendes Code-Snippet dient dazu als Grundlage. Auf das Abfangen des umfangreichen Fehlerstatus verzichten wir hier allerdings.

.NET Code zur Adressbestimmung über Google-API
‘ Code-Snippet zur Abfrage Geokoordinaten via Google-API

‘ Return Code:
‘ G_GEO_SUCCESS     = 200 (ok)
‘ G_GEO_BAD_REQUEST = 400 (… konnte nicht erfolgreich analysiert werden.)
‘ …

Imports System.Console
Imports System.IO
Imports System.Net

Module ModuleGeo
Sub Main()
Dim sURL As String = “Nordring 98, 90409 Nürnberg,Deutschland”
Dim sKey As String = “API_Key!”
Dim sBuffer As String
sURL = “http://maps.google.com/maps/geo?q=”
& System.Web.HttpUtility.UrlEncode(sURL)
& “&output=csv&key=” & sKey
Dim oRequest As WebRequest = WebRequest.Create(sURL)
oRequest.Method = “GET”
Dim oResponse As WebResponse = oRequest.GetResponse()
Dim oStream As New StreamReader(oResponse.GetResponseStream())
sBuffer = oStream.ReadToEnd()

WriteLine(sBuffer)
oStream.Close()
oResponse.Close()
ReadLine()
End Sub
End Module

Eine Abfrage der Standortkoordinaten von Bissantz & Company ist auch direkt über den Browser möglich. Sie funktioniert bisher auch ohne API-Key.

GGeoStatusCode GGeoAddressAccuracy latitude    longitude

————– ——————- ——–    ———

200,           8,                  49.4693862, 11.0852380

Das Datenmodell für unsere Konkurrenzanalyse ist wieder sehr einfach aufgebaut. Eine Measuregroup „LinkedDimension“ verbindet die beiden Dimensionen „Filiale_Von“ und „Filiale_Zu“ mittels einem Primärschlüssel und ermöglicht so den Zugriff auf den jeweiligen Längen- und Breitengrad.

Für alle Betrachtungen seien die Nordsee-Filialen unsere Bezugsgrößen, d. h. unsere eigenen Filialen.

Zur weiteren Betrachtung stellen wir uns auf eine Filiale, hier die Nordseefiliale in der Grunerstr. 20, und werfen einen Blick auf die in der nächsten Umgebung (Luftlinie) gelegenen Mitbewerber. Die eigene Filiale (mit Abstand 0 km) ist hierbei schon ausgenommen. Die Abstandsberechnung erfolgt nach der in den Blogs „Geoberechnungen (mit Filterwerten und benannten Mengen)“ und „Geoberechnungen (Geokoordinaten und Beispiel PLZ-Zuordnung)“ dargestellten Methodik.

Mit diesem Wissen können wir leicht bekannte Entfernungskreuztabellen, also den Abstand aller eigenen Filialen zueinander, aufzeigen.

Zurück zu unserer einfachen Abstandstabelle. Jetzt interessieren uns vielleicht auch mögliche Abstandsregionen, z.B. innerhalb 1 km, zwischen 1 km und 2,5 km etc. um den Standort. Die Dimension lässt sich leicht in die Pivottabelle ziehen und nach Abstand ranken.

Wichtigste Angabe hierbei ist die innerhalb von DeltaMaster hinzugefügte Summenspalte, diese besagt, dass sich für unsere Standortfiliale Nordsee, Grunerstr. 20, 5 Mitbewerber (und möglicherweise eigene Filialen) im Umkreissegment <=1 km, 11 Mitbewerber zwischen 1 und 2,5 km etc. befinden. Diese Information möchten wir für alle eigenen Filialen berechenbar machen. Dazu definieren wir einen neuen Analysewert, der uns die Spaltensummation erledigt.

/* Anzahl Filialen pro Entfernungsregion - AnzahlFPR */
#1 = Abstand
#2 = Abstand_Von
#3 = Abstand_Bis

SUM(
       CROSSJOIN(
              { [Filiale_Von].[Filiale_Von].CurrentMember },
                   DESCENDANTS( [Filiale_Zu].[Filiale_Zu].CurrentMember,
                   [Filiale_Zu].[Filiale_Zu].[KdNr]
                    )
       )
        , IIF( #1>#2 AND #1<=#3, 1, NULL )
)

 

Oder im Analysewertbrowser von DeltaMaster:

Die Tabelle gestaltet sich schließlich folgendermaßen:

Unsere zuvor berechneten Werte 5, 11 bzw. 23 Mitbewerber, in der jeweiligen Abstandsregion um unsere Standortfiliale in der Grunerstr. 20, finden wir jetzt als Zeileninformation in unserer Tabelle wieder.

Durch die Hinzunahme der Filialdimension ist eine einfache Unterscheidung in Filiale bzw. Mitbewerber möglich. Beispielsweise befinden sich in der Umkreisregion von 2,5 km bis 5 km um die Nordseefiliale Grunerstr. 20, 22 Mitbewerber sowie eine eigene Filiale.

Möchte man die Informationen weiter bis zu den einzelnen Mitbewerbern aufklappen, wird die Darstellung schnell unübersichtlich. Es empfiehlt sich eine Transponierung und Festlegung auf eine Abstandsregion vorzunehmen, hier der Umkreisradius <=1 km um die betrachtete Filiale.

Mit einfachen Bordmitteln von DeltaMaster ist eine Abschätzung aufwandslos und vor allem berechnungsschnell möglich; diese trägt natürlich, insbesondere bei kurzen Abständen, den räumlichen Gegebenheiten (Autobahn, Brücke, Kanal etc.) nicht Rechnung. Eine Erweiterung auf reale Entfernungen bzw. Abstandszeiten wäre wünschenswert.