REST インターフェイスの新しい手法を使用して、新しいジオコーディング アドインを提供しました。 その核となるのは、それぞれの REST インターフェイスへの呼び出しです。マップクエスト、多くのルーティング サービスとアプリケーションを提供する会社です。 MapQuest のサービスの 1 つにジオコーディングがあります。 提供された住所ごとに、MapQuest はその場所の緯度と経度、および国や州などの管理情報を返します。
データ テーブルは JMP で情報を収集する通常の方法であるため、分析はユーザー ダイアログを介してデータ テーブルの列に役割を割り当てることから始まります。 のジオコーディング 2020 アドイン同じように動作します。 ユーザーがダイアログを完了すると、プログラムは関連するデータをデータ テーブルから収集し、REST API が必要とする構造に変換してから MapQuest に送信します。 したがって、プログラムの大まかな構造は、1) ユーザーダイアログの完了、2) データの収集、3) インターフェイス用のデータの準備、4) インターフェイスリクエストの送信、5) 結果の解釈、6) JMP データテーブルの書き込みです。 3 番目のステップであるデータ準備は、関数として定義され、次のように使用できます。 MapQuest_geocode.jsl JSLクックブックで。 これを独自のジオ アプリケーションに埋め込んだり、REST 呼び出しのデータを構造化する方法のアイデアを得るために使用したりできます。
ベースライン機能
あなた、またはあなたのプログラムのユーザーは、有効なAPI キーマップクエストより。
JMP データはデータ テーブル列の形式で提供されますが、REST インターフェイスは JSON 構造を使用する可能性が最も高いです。 その結果、両方のフォーマット間で変換する機能が必要になります。 JSL には、リストまたは連想配列のいずれかのデータ コレクションの構造もあります。 この関数の目的は、すべての非ネイティブ JSL コマンドをカプセル化することです。 必要なデータは、文字、数値、またはリスト形式の一般的な JSL 変数で提供されます。 呼び出しから返されるデータも JSL リストとして提供されます。 したがって、この関数を JSL スクリプトに埋め込むのに、JSL 標準以外の追加の知識は必要ありません。
インターフェイス
JSL 関数は、次のようなステートメントで呼び出されます。
結果 = 関数 ();
関数がパラメーターを必要とする、または受け入れる場合、それらは括弧内にリストされます。 この関数 GC_geocode は、空の括弧またはパラメーターの完全なリストを使用して呼び出すことができます。 空の括弧で呼び出すと、次の 2 つのグラフに示すように、入力と出力のアウトラインを含むパラメーター定義ウィンドウが呼び出されます。


関数呼び出しのパラメーターは、常に位置パラメーターです。 パラメーターを指定して関数を呼び出す場合、すべての必須パラメーターを指定する必要がありますが、それらは空である場合があります。
私の中でGeocoding 2020 アドインに関するブログ投稿、アドインの使用方法の例として、故郷周辺の地元の観光地をいくつか使用しました。 そのうちの 2 つを取り上げて、このインターフェイスがどのように機能するかを見てみましょう。

|
Alte Freiheit 24a, 42103 ヴッパータール, ドイツ
|
Wuppertaler Schwebebahn は、全長 13 km の吊り下げ鉄道であり、吊り下げ式の車両を備えた世界最古の電気高架鉄道であり、1901 年に開通しました。
|

|
Schloßplatz 2, 42659 ゾーリンゲン, ドイツ
|
12 世紀に建てられた城を再建したシュロス ブルク城番目世紀。
|
まず、MapQuest からのアクセス キーが必要です。それが 1234ABCD であるとします。 このインターフェイスを使用する 1 つの方法は、アドレス文字列をそのまま使用することです。 この場合、フォーマット標識 (位置 2) は 1 以上である必要があります。 次に、関数呼び出しは次のようになります。
coordinates = GC_geocode ("1234ABCD", 1, {"Alte Freiheit 24a, 42103 Wuppertal, Deutschland",<BR /> "Schloßplatz 2, 42659 Solingen, Deutschland"}, {}, {}, {}, {}, {}, {});
アドレスが 1 つの文字列ではなく個別の要素にある場合は、フォーマット インジケーターを 0 (ゼロ) にする必要があります。つまり、呼び出しは次のようになります。
coordinates = GC_geocode ("1234ABCD", 0, {}, {"Deutschland", "Deutschland"}, {}, {"Wuppertal", "Solingen"}, {42103, 42659},<BR /> {"Alte Freiheit 24a", "Schloßplatz 2"}, {})
もちろん、値をパラメーターとして入れる必要はありません。また、国名のリストを含むリスト変数などの変数を指定することもできます。
いずれの場合も、結果は同じデータのリストになります。
{200, "HTTP/1.1 200 OK", "", {0, 0}, {"", ""}, {51.25603, 51.13768}, {7.14865, 7.15245}, {"exact", "exact"}, {"DE", "DE"},<BR /> {"Nordrhein-Westfalen", "Nordrhein-Westfalen"}, {"", ""}, {"42103", "42659"}, {"Wuppertal", "Solingen"},<BR /> {"Alte Freiheit 24A", "Schloßplatz 2"}, 0}
アドレスを見つけてタグを付けることができたので、各アドレスの応答コードは「0」(要素 4) です。これが、エラー メッセージが表示される要素 5 に空のテキストがある理由です。 上記のインターフェース宣言を考えると、残りは簡単に理解できます。
技術的な詳細
基本機能はシンプル。 MapQuest に住所を送信し、緯度と経度を取得します。 この単純なタスクのために、MapQuest はさまざまな入力フォーマットとプロセス モードを提供します。 住所情報は、「Deutschland, Schloßplatz 2, 42659 Solingen」のように、コンマで区切られた 1 つのテキスト文字列として提供できます。これは私の故郷の近くにある有名な城の住所です。 別の方法として、住所を単一の要素として指定することもできます: 国 = 「ドイツ」、通り = 「シュロスプラッツ 2」、都市 = 「ゾーリンゲン」、郵便番号 = 「42659」。
ほとんどの場合、複数のアドレスが検索される可能性があると思います。 そのため、この関数はアドレス情報をリストとして取得することを想定しています。これは、完全なアドレスを含む文字列のリスト、またはアドレス要素を含む複数のリストのいずれかです。 MapQuest には、2 つのアドレス形式に対して 2 つの異なる URL があります。 シングル ストリング インターフェイスはバッチ モードで動作します。つまり、1 回の呼び出しで複数のアドレスを解決できます。 個別のアドレス要素のインターフェイスは、一度に 1 つのアドレスのみを受け入れます。 パフォーマンス上の理由から、関数は個別の要素を 1 つの文字列に結合し、多数のアドレスを特定する必要がある場合 (現在: > 100) にバッチ モードを実行します。
指定された形式に関係なく、各住所はその国を提供する必要があります。 また、必要最小限の情報が与えられているかどうかのチェックもありません。 他のすべての要素はオプションです。 アドレスを正確に記述するほど、結果の品質が向上します。 住所全体が 1 つの文字列として提供される場合、その文字列内の住所要素の順序は重要ではありません。
データ テーブルから位置を読み取り、そのデータ テーブルに除外された行がある場合は、除外された行のリスト (excludedrows = As List( dt << Get Excluded Rows )) をパラメーター 12 として指定する必要があります。 そうしないと、返されたリストがデータ テーブルと同期していない可能性があります。 メッセージリストでは、これらの観測は「除外」としてマークされています。データ テーブルに元々あるよりも多くの「除外された」観測がある場合、その観測は最小限の位置情報を提供できませんでした。
MapQuest はアメリカの会社で、テストしたすべてのアメリカの住所で一貫した結果が得られました。 世界の他の地域の住所では、必ずしもそうではありませんでした。 州、地区、都市などの位置情報は、現地の言語で返されることがよくありますが、結果が英語で返されることもあります。
このコードがあなたのプロジェクトに役立つこと、または JSL の適用に関する洞察を提供できることを願っています。 ご質問やご提案をお待ちしておりますが、これは Geocoding 2020 アドインの一部であるため、そのアドインでの使用目的と一致する変更のみを行います。