Geokodierung gibt es schon seit einiger Zeit. Mittlerweile wird dieser Dienst jedoch über REST-Schnittstellen angeboten, die mehr Flexibilität und Genauigkeit bieten. Ich habe ein Add-In erstellt, das den Dienst von Mapquest nutzt, um Geocodes für Adressen zu finden und Entfernungen, Reisezeiten oder komplette Routen zwischen Ortspaaren zu berechnen. Dies ist die Beschreibung seiner Funktionalität und Verwendung.
Ich war schon immer von Karten fasziniert. Bevor es digitale Karten gab, kaufte ich für jeden Urlaub Karten, meist in anderen Maßstäben und mit viel mehr Details, als ich wirklich brauchte. Kein Wunder also, dass ich auch davon fasziniert bin JMP verfügt über Diagrammfunktionen, mit denen Daten auf Karten dargestellt werden können.
Was ist Geokodierung?
Eine der interessanten Anwendungen ist die Geokodierung, also die Möglichkeit, Punkte auf Karten zu lokalisieren. Normalerweise haben Sie einen Punkt von Interesse und seine Adresse. Um seine Position zu finden und auf einer Karte darzustellen, benötigen Sie außerdem die Geokoordinaten. Wie Du vielleicht erwartest, Wikipedia bietet weitere Details zur Geokodierung.
Warum ein neues Geokodierungs-Add-in?
In den letzten Jahren wurde die Computerkommunikationstechnik als bekannt AUSRUHEN hat eine größere Verbreitung gefunden. In einer Keynote im Jahr 2019 sprach John Sall über „ Geheime Funktionen von JMP . „Eines dieser versteckten Juwelen in JMP ist wirklich ziemlich tief vergraben: die Möglichkeit, über JSL-Befehle auf die REST-APIs (Advance Programming Interfaces) zuzugreifen. Da Computerkommunikationsdaten häufig über die „ JSON „Datenstruktur“ haben JMP-Entwickler JSL-Befehle erstellt, die Daten problemlos zwischen JSL-Datenstrukturen und JSON-Daten übertragen. Diese Technik hat zunehmend an Bedeutung gewonnen. Tatsächlich bieten die Johns Hopkins University und das Robert Koch-Institut REST-APIs für ihre Datenpools für Informationen im Zusammenhang mit COVID-19 an; JMP-Kunden nutzen sie für den Zugriff auf SAP-Daten für das Qualitätsmanagement; und ich verwende eines für die Geokodierung. Diese Schnittstelle erweitert die Möglichkeiten des Informationsaustauschs, da sie mehr als nur die Geokoordinaten von Sonderzielen bereitstellt. Darüber hinaus können Benutzer Informationen zu Entfernungen, Reisezeiten und sogar zur Routenplanung abrufen. In diesem Artikel geht es um die Verwendung von Add-in die ich in den Dateiaustausch geladen habe. Der technische Hintergrund wird in einem separaten Beitrag erläutert, wie im letzten Absatz zusammengefasst.
Was sind die Funktionen?
Sie benötigen eine Datentabelle mit Adressinformationen pro Beobachtung. Mithilfe der Adressen können drei verschiedene Ebenen von Geoinformationen hinzugefügt werden, wobei jede Ebene die Informationen der vorherigen enthält.
- Geokoordinaten
Für jede Beobachtung werden die Breiten- und Längengrade ihres Standorts addiert. Darüber hinaus erhalten Sie die Hierarchie der Verwaltungseinheiten, des Landes, des Bundeslandes, des Bezirks, der Postleitzahl, der Stadt, der Straße und eine Einschätzung, wie nahe diese Adresse im Rahmen der in der Datenbank verfügbaren Informationen getroffen wurde.
- Entfernung und Reisezeit
Für jedes Paar aufeinanderfolgender Zeilen in Ihrer Datentabelle (z. B. Zeile 1 –> Zeile 2 / Zeile 2 –> Zeile 3 /….) werden der Abstand zwischen den Adressen und die erforderliche Reisezeit zur zweiten Zeile hinzugefügt. Die Verbindungen werden in einer zusätzlichen Spalte aufgelistet. Die Reisezeit wird basierend auf der Wahl des Transportmittels des Benutzers berechnet: Auto, Fahrrad oder zu Fuß.
- Routenführung
Es wird eine zusätzliche Tabelle erstellt, die alle oben genannten Informationen sowie die Geocodes aller Punkte enthält, die die Route zwischen zwei aufeinanderfolgenden Zeilen beschreiben.
Voraussetzungen
Es gibt mehrere Internetseiten, die Karten- und Routing-Dienste anbieten. Einen guten Überblick gibt die Zeitschrift Programmierbares Web . Ich habe mich für die Verwendung entschieden MapQuest . Das Unternehmen bietet eine Vielzahl kostenpflichtiger Dienste, aber auch eine kostenlose API. Wenn Sie es nutzen möchten, müssen Sie sich zunächst registrieren und einen kostenlosen API-Schlüssel erhalten. Natürlich benötigen Sie auch das Geocoding 2020-Add-In. Es wird im Add-Ins-Menü im Untermenü „Kartenformen“ installiert.
Beim ersten Anruf werden Sie darüber informiert, dass Sie den erforderlichen Schlüssel von MapQuest erhalten können, und erhalten ein Feld zum Einfügen des Schlüssels.

Die Erinnerung an den Dialog ist deaktiviert. Nachdem der Schlüssel eingefügt wurde, wird er getestet, um festzustellen, ob es sich um einen richtigen MapQuest-Schlüssel handelt. Der Schlüssel muss überprüft werden, bevor Sie fortfahren können. Wenn Sie einen gültigen Schlüssel angegeben haben, wird dieser im Verzeichnis des Benutzers im Ordner AppData/Roaming/SAS/JMP gespeichert. Wenn dieses Verzeichnis nicht existiert, wird es erstellt.
Damit alle Befehle im Add-In funktionieren, müssen Sie die JMP-Sprache auf Englisch einstellen Und Wählen Sie die Option „JMP-Sprache verwenden…“. Leider ist das nicht über JSL möglich. Sie müssen diese Auswahl unter Verwendung Ihrer Sprachäquivalenz zu Datei -> Einstellungen -> Windows-spezifisch treffen. Das Add-in überprüft, ob die Spracheinstellungen korrekt sind, und benachrichtigt Sie, wenn dies nicht der Fall ist.
Lass uns gehen
Das Menü besteht aus zwei Teilen. Der erste Teil ist der obere rote Bereich, der wie fast alle Dialoge der JMP-Plattform aufgebaut ist; Es enthält die Spaltenliste, den Rollenteil und das Aktionsfeld. Im Rollenbereich gibt es zwei Teile, hervorgehoben durch blaue Rahmen. In Ihrer Datentabelle können die Adressinformationen in einem von zwei Formaten gespeichert werden: entweder als eine Spalte, die die vollständige Adresse als Textzeichenfolge enthält, oder als separate Spalten, wobei jede Spalte einen Teil der Adresse enthält, z. B. Land, Stadt, Straße. Sie können jedes dieser Formate bereitstellen, sie schließen sich jedoch gegenseitig aus. In beiden Fällen, Ihre Adresse muss das Land enthalten . Die Angabe kann je nach Wunsch als Name oder als ISO-Code erfolgen.
Der zweite Teil ist der untere rote Rahmen, der anzeigt, welche Optionen verfügbar sind. Sie sind in Gruppen von Optionsfeldern organisiert (der Screenshot unten zeigt die Standardeinstellungen). Alle Optionen fügen Ihrer Datentabelle eine Gruppe zusätzlicher Spalten hinzu; Durch die Kombination von „Routing“ und „Detaillierte Routen“ entsteht ein zusätzlicher Datensatz mit einer Kopie Ihrer Daten. Diese Punkte werden als „Points of Interest“ bezeichnet. Darüber hinaus gibt es „Wegpunkte“, die Punkte, an denen entlang Ihrer Route abgebogen werden muss.

Ein Beispiel
Um zu testen, wie das alles funktioniert, habe ich einige Adressinformationen aus dem Internet gesammelt. Ich bin in Solingen aufgewachsen, einer Kleinstadt im Westen Deutschlands. Im Mittelalter war es für die Herstellung hochwertiger Schwerter und Bestecke bekannt, weshalb Sie hier das Deutsche Besteckmuseum finden. Neben dem Museum befindet sich eine kleine, aber sehr eindrucksvolle Barockkirche. Es gibt auch einige andere berühmte Orte in der Nähe:

|
Deutsches Klingenmuseum
|
Deutsches Besteckmuseum
|

|
Gräfrather Klosterkirche
|
Barocke Klosterkirche
|

|
Das Neandertal
|
Die Region, in der die Überreste eines Zweigs unserer Vorfahren erstmals entdeckt wurden
|

|
Die Wuppertaler Schwebebahn
|
Eine 13 km lange Schwebebahn, die älteste elektrische Hochbahn mit Hängewagen der Welt, eingeweiht im Jahr 1901
|

|
Die Müngstner Brücke
|
Die höchste Eisenbahnbrücke Deutschlands, erbaut 1897
|

|
Schloss Burg
|
Eine rekonstruierte Burg aus dem 12 Th Jahrhundert
|
Nachdem ich im Internet nach den Adressen gesucht hatte, kopierte ich die Zeichenfolgen in eine JMP-Datentabelle. Keine der Adressen enthielt einen Ländernamen, daher habe ich allen Zeichenfolgen „Deutschland“ vorangestellt. Die Saiten sehen jetzt so aus
Deutschland, Talstraße 300, 40822 Mettmann
|
Deutschland, Alte Freiheit 24a, 42103 Wuppertal
|
Deutschland, Klosterhof 4, 42653 Solingen
|
Deutschland, Klosterhof 3, 42653 Solingen
|
Deutschland, Müngstener Brückenweg, 42659 Solingen
|
Deutschland, Schloßplatz 2, 42659 Solingen
|
Ich wähle bewusst den deutschen Ländernamen „Deutschland“. Weisen Sie im Dialog dieser Spalte die Rolle „Einzeladresse“ zu und los geht’s.

Als Ergebnis des Laufs werden diese Spalten an Ihren Datensatz angehängt:
Geo-Informationen
|
GC#Latitude
|
GC#Längengrad
|
GC#Ländercode
|
GC#State
|
GC#Bezirk
|
GC#Postleitzahl
|
GC#Stadt
|
GC#Straße
|
GC#Qualitätsbewertung
|
GC#Rückmeldung
|
Ich denke, dass die Spaltennamen für sich sprechen. MapQuest liefert für jeden Treffer eine geschätzte Qualitätsbewertung. Es ist ziemlich ausführlich, deshalb habe ich diese Informationen in vier Kategorien zusammengefasst: Genau, Nah, Ungefähr, Weit. Die Zeilen in Ihrer Datentabelle erhalten entsprechend dieser Bewertung Symbole und Farben. Alle Positionen werden in einer Karte angezeigt und der Datentabelle wird ein Skript hinzugefügt, das diese Karte reproduziert. Abhängig von der Fläche, über die Ihre Punkte verteilt sind, handelt es sich bei der Hintergrundkarte entweder um eine Straßenkarte oder um Simple Earth.
In dieser Datentabelle habe ich die Adresszeichenfolge in ihre einzelnen Komponenten aufgeteilt (das ist einfach, wenn Sie Spalten à Dienstprogramme à Text in Spalte verwenden…) und die Koordinaten mithilfe der Rollen „Separate Adressfelder“ angefordert.

Es ist nicht erforderlich, alle Rollenfelder in diesem Abschnitt auszufüllen. Das Land ist eine Mindestanforderung. Je mehr Informationen Sie angeben, desto besser ist die Trefferquote. Die Ergebnisse beider Methoden zum Anfordern von Koordinaten sind nicht vollständig identisch. Die Koordinaten selbst können etwas abweichen und für die Detailanfrage können ggf. weitere Angaben (z. B. Ortsteil) gemacht werden. Auch die Qualitätsbeurteilung kann variieren.
Aus Leistungsgründen werden einzelne Adressfelder zu einer Zeichenfolge verkettet und einzelne Zeichenfolgenanforderungen werden an MapQuest gesendet, wenn Ihre Datentabelle mehr als 200 Adressen enthält.
Wenn Sie die Kombination aus „Routing“ und „Nur Entfernungen/Zeit“ wählen, erhalten Sie die gleichen Informationen wie bei der Geokodierung zurück, plus drei zusätzliche Spalten. Von Zeit zu Zeit erhalten Sie möglicherweise Fehlermeldungen:
Sehenswürdigkeit
|
GC#Rückmeldung
|
GC#Entfernung (km)
|
GC#Time (Fahrrad)
|
GC#Beine
|
Neandertaler
|
|
.
|
.
|
0
|
Wuppertaler Schwebebahn
|
Route kann nicht berechnet werden.
|
19.1287
|
:0:00:52:39
|
1
|
Deutsches Klingenmuseum
|
Route kann nicht berechnet werden.
|
0
|
:0:00:00:00
|
2
|
Gräfrather Klosterkirche
|
|
0
|
:0:00:00:00
|
3
|
Müngstner Brücke
|
|
9,92
|
:0:00:26:26
|
4
|
Schloss Burg
|
|
5.0163
|
:0:00:13:55
|
5
|
Aufeinanderfolgende Reihen bilden einen Abschnitt der gesamten Route. Die Zielzeile enthält die Informationen zum Bein. Im Beispiel geht es auf der ersten Etappe vom Neandertal zur Wuppertaler Schwebebahn. Die Entfernung für eine Fahrradroute beträgt etwa 19 Kilometer, die geschätzte Fahrzeit beträgt 52 Minuten.
Aus welchen Gründen auch immer konnten keine Radwege zum Deutschen Klingenmuseum oder zur Gräfrather Klosterkirche gefunden werden. Daher verfügen die Etappen zwei und drei über keine Reiseinformationen, während die Etappen vier und fünf die entsprechenden Informationen erneut bereitstellen.
Diese Kombination von Optionen fordert Details für eine Route zwischen zwei aufeinanderfolgenden Zeilen in der Datentabelle mit Entfernungen in Meilen an:
Ihre Datentabelle wird um die oben für die Geokodierung beschriebenen Spalten erweitert. Für das Routing wird eine zusätzliche Tabelle mit einer Kopie jeder Zeile Ihrer Datentabelle erstellt; Zwischen diesen Zeilen werden neue Linien eingefügt, eine pro signifikantem Punkt entlang der Route. Der letzte Abschnitt der Solingen-Tour sieht so aus:

Zeile 49 enthält die vorletzte Adresse in der Datentabelle, wo Abschnitt 4 endet. Die Strecke, die vom vorherigen Ort bis zu diesem Punkt führte, war 15 km lang und hat eine geschätzte Fahrzeit von 15 Minuten mit dem Auto. Es handelt sich um einen „Point of Interest“. Die nächste Reihe ist das Ende des ersten Abschnitts von Etappe 5 nach +/- 300 Fuß und fünf Sekunden Fahrzeit. Es ist der erste Wegpunkt in einer Reihe von sieben Wegpunkten, bevor der nächste (und letzte) Punkt von Interesse erreicht wird. Karten zeigen die Ergebnisse und ihre Skripte sind auch in den Tabellen enthalten.
Die Datentabelle ist Teil des Add-Ins und kann über die Schaltfläche „Hilfe“ geöffnet werden. Sie können damit anfangen, herumzuspielen und sich die Bilder der von mir aufgenommenen Attraktionen anzusehen.
Und wenn Du Sollten Sie jemals in diese Gegend kommen und einige der Orte besuchen, vergessen Sie nicht, nach einem Restaurant zu suchen, das bedient Bergische Kaffeetafel , eine sehr reichhaltige Kombination lokaler Spezialitäten, darunter Brot, Würstchen, süßer Reis, Waffeln und mehr. Es ist in der Gegend, die ich als Demonstration ausgewählt habe, in der ganzen Gegend bekannt und sollte daher in vielen Restaurants zu finden sein.

Beim ersten Lauf
Für MapQuest benötigen Sie einen persönlichen API-Schlüssel. Du bekommst es von ihnen Website des Entwicklers kostenlos. Das Add-In fragt nach diesem Schlüssel und stellt ein Feld zum Einfügen bereit.

Das Add-In speichert den Schlüssel im Appdata-Verzeichnis des Benutzers für SAS\JMP. Vor jedem Lauf versucht es, den Schlüssel zu lesen und wird ihn verwenden, solange er vorhanden ist.
Ausgeschlossene Zeilen/Routing nicht möglich

Das Add-in weist den Zeilen Symbole, Farben und Beschriftungen zu, respektiert aber auch den „ausgeschlossenen“ Zeilenstatus, der spezifische Konsequenzen für die Routing-Anwendung hat. Wenn eine Zeile ausgeschlossen ist oder ein Routing zu ihrer Adresse nicht möglich ist, wird diese Zeile ignoriert und nach einer Route zur nächsten Adresse gesucht.
In dieser Situation werden Strecken zwischen Neandertal und Wuppertaler Schwebebahn, zwischen Wuppertaler Schwebebahn und Müngstner Brücke sowie zwischen Müngstner Brücke und Schloss Burg durchsucht.
Ebenso werden Standorte übersprungen, wenn eine Weiterleitung zu ihnen nicht möglich ist.
Technische Details
Dem aufmerksamen Beobachter dürfte aufgefallen sein, dass der Hauptdialog in einem Tab enthalten ist. Tabs sind nutzlos, wenn sie alleine stehen. Diese Registerkarte spiegelt die Idee wider, dass Standorte für Routings in verschiedenen Formaten angezeigt werden können. Sollten Anfragen nach alternativen Möglichkeiten zur Bereitstellung von Standorten für die Weiterleitung vorliegen, erhält diese Registerkarte möglicherweise gleichrangige Registerkarten.
Die Motivation, dieses Add-In zu schreiben, resultierte aus meinem kombinierten Interesse an Karten im Allgemeinen und der REST-API-Technik. Um Letzteres transparenter zu machen und vielleicht sogar noch weiter verbreitet zu machen, habe ich drei Dateien in das JSL-Kochbuch eingefügt. Sie definieren Funktionen, die von anderen Programmen aufgerufen werden können. Einer davon ist der REST-Aufruf an MapQuest. Ich beschreibe den Inhalt und eine Beschreibung der Benutzeroberfläche in einem Blog-Beitrag darüber grober MapQuest-Aufruf . Die anderen Skripte sind Umschläge für den REST-Aufruf. Sie nehmen JMP-Listen als Eingaben und erstellen die dafür erforderlichen JSON-Strukturen Geokodierung oder Routenführung Anruf. Wenn viele Adressen codiert werden müssen, werden diese für eine bessere Zuverlässigkeit und Leistung in Blöcke zu je 50 gepackt. In meinen Blogbeiträgen zum Thema Geokodierung und das Routenführung In Bezug auf Unterroutinen beschreibe ich diese Codeteile ausführlicher.
Wie bereits erwähnt, haben JMP-Programmierer hervorragende Arbeit geleistet, indem sie JSL-Funktionen bereitgestellt haben, die in beide Richtungen zwischen JMP-Datenstrukturen und JSON übersetzen. In JSL-Begriffen handelt es sich um Listen und assoziative Arrays. Diese Elemente sind stapelbar. Möglicherweise verfügen Sie über ein assoziatives Array, das eine Liste assoziativer Arrays enthält, die… enthält. Ein einzelner MapQuest-Aufruf liefert einen umfangreichen Datensatz, von dem ich nur einige Elemente benötigte. Manchmal befanden sich diese zwei Ebenen tief im Stapel; manchmal auch viele Ebenen tief. Deshalb fand ich es nützlich, eine zu schreiben kleines Drehbuch das durch diese Struktur iteriert. Und ich wäre kein seriöser JMPer, wenn ich nicht nach einer Visualisierung des Ergebnisses suchen würde. Den perfekten Weg habe ich im Ishikawa-Diagramm gefunden. Diese Programmierung erinnerte mich an die Kraft der Rekursion, die die beste Technik ist, um einen tiefen Stapel herunterzusteigen und sicher zurückzukehren. Ich dachte, es könnte auch anderen Programmierern helfen oder sie inspirieren. Ich habe das Drehbuch in das Kochbuch eingefügt und – natürlich – ich hat einen Beitrag geschrieben über Rekursion und das Zeichnen hierarchischer Strukturen.
Für die Entwicklung habe ich JMP 15 verwendet und dabei ein JMP-Projekt verwendet. Ich würde nicht sagen, dass mein kleines Projekt ohne Projects nicht möglich gewesen wäre, aber Projects hat es viel einfacher gemacht.