새로운 지오코딩 추가 기능을 제공하기 위해 REST 인터페이스의 새로운 기술을 사용했습니다. 핵심은 각 REST 인터페이스에 대한 호출입니다. 맵퀘스트 , 많은 라우팅 서비스 및 응용 프로그램을 제공하는 회사입니다. MapQuest의 서비스 중 하나는 지오코딩입니다. 제공된 모든 주소에 대해 MapQuest는 위치의 위도와 경도는 물론 국가 및 주와 같은 행정 정보를 다시 보냅니다.
데이터 테이블은 JMP에서 정보를 수집하는 일반적인 방법이므로 분석은 사용자가 사용자 대화 상자를 통해 데이터 테이블의 열에 역할을 할당하는 것으로 시작됩니다. 그만큼 지오코딩 2020 추가 기능 같은 방식으로 작동합니다. 사용자가 대화를 완료하면 프로그램은 데이터 테이블에서 관련 데이터를 수집하고 이를 REST API에 필요한 구조로 변환한 다음 MapQuest로 보냅니다. 따라서 프로그램의 대략적인 구조는 다음과 같습니다. 1) 사용자 대화 상자 완성, 2) 데이터 수집, 3) 인터페이스용 데이터 준비, 4) 인터페이스 요청 보내기, 5) 결과 해석, 6) JMP 데이터 테이블 쓰기. 세 번째 단계인 데이터 준비는 함수로 정의되며 다음과 같이 사용할 수 있습니다. MapQuest_geocode.jsl JSL 요리책에서. 자신의 지리 응용 프로그램에 포함하거나 이를 사용하여 REST 호출을 위해 데이터를 구조화하는 방법에 대한 아이디어를 얻을 수 있습니다.
기본 기능
귀하 또는 귀하의 프로그램 사용자는 유효한 API 키 맵퀘스트에서.
JMP 데이터는 데이터 테이블 열의 형태로 제공되는 반면 REST 인터페이스는 대부분 JSON 구조를 사용합니다. 결과적으로 두 형식 간에 변환하는 기능이 필요합니다. JSL에는 목록 또는 연관 배열과 같은 데이터 수집을 위한 구조도 있습니다. 이 함수의 목적은 네이티브가 아닌 모든 JSL 명령을 캡슐화하는 것입니다. 필요한 데이터는 문자, 숫자 또는 목록 형식의 일반적인 JSL 변수와 함께 제공됩니다. 호출에서 반환되는 데이터는 JSL 목록으로도 제공됩니다. 따라서 이 함수를 JSL 스크립트에 임베드하는 데 JSL 표준 이외의 추가 지식이 필요하지 않습니다.
인터페이스
JSL 함수는 다음과 같은 명령문으로 호출됩니다.
결과 = 함수();
함수가 매개변수를 필요로 하거나 허용하는 경우 대괄호 안에 나열됩니다. 이 GC_geocode 함수는 빈 대괄호 또는 전체 매개변수 목록을 사용하여 호출할 수 있습니다. 빈 대괄호로 호출하면 다음 두 그래프에 표시된 대로 입력 및 출력에 대한 개요가 있는 매개변수 정의 창이 호출됩니다.


함수 호출의 매개변수는 항상 위치 매개변수입니다. 함수가 매개변수와 함께 호출되면 모든 필수 매개변수를 제공해야 하지만 비어 있을 수 있습니다.
내 Geocoding 2020 추가 기능에 대한 블로그 게시물 , 추가 기능을 사용하는 방법의 예로 고향 주변의 일부 지역 관광지를 사용했습니다. 이 인터페이스가 어떻게 작동하는지 알아보기 위해 두 가지를 살펴보겠습니다.

|
Alte Freiheit 24a, 42103 부퍼탈, 독일
|
부퍼탈러 슈베베반(Wuppertaler Schwebebahn)은 13km 길이의 현수 철도이자 세계에서 가장 오래된 전기 고가 철도로 1901년에 개통되었습니다.
|

|
Schloßplatz 2, 42659 졸링겐, 독일
|
12세기에 복원된 성, Schloss Burg 일 세기.
|
먼저 MapQuest의 액세스 키가 필요합니다. 1234ABCD라고 가정해 보겠습니다. 이 인터페이스를 사용하는 한 가지 방법은 주소 문자열을 그대로 사용하는 것입니다. 이 경우 포맷 인디케이터(Position 2)는 1 이상이어야 합니다. 그런 다음 함수 호출은 다음과 같습니다.
coordinates = GC_geocode ("1234ABCD", 1, {"Alte Freiheit 24a, 42103 Wuppertal, Deutschland",<BR /> "Schloßplatz 2, 42659 Solingen, Deutschland"}, {}, {}, {}, {}, {}, {});
주소가 하나의 문자열이 아닌 별도의 요소에 있는 경우 형식 표시기는 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"과 같이 쉼표로 구분된 부분이 포함된 하나의 텍스트 문자열로 제공될 수 있습니다. 또는 주소를 단일 요소로 지정할 수 있습니다. 국가 = "Deutschland", 거리 = "Schloßplatz 2", 도시 = "Solingen", 우편 번호 = "42659"
대부분의 경우 하나 이상의 주소를 조회할 수 있다고 가정합니다. 따라서 함수는 전체 주소가 있는 문자열 목록 또는 주소 요소가 있는 여러 목록과 같은 목록으로 주소 정보를 얻을 것으로 예상합니다. MapQuest에는 두 가지 주소 형식에 대한 두 가지 다른 URL이 있습니다. 단일 문자열 인터페이스는 배치 모드에서 작동합니다. 즉, 한 번의 호출로 여러 주소를 확인할 수 있습니다. 별도의 주소 요소에 대한 인터페이스는 한 번에 하나의 주소만 허용합니다. 성능상의 이유로 이 함수는 별도의 요소를 하나의 문자열로 결합하고 많은 주소를 찾아야 할 때 배치 모드를 실행합니다(현재: > 100).
제공된 형식에 관계없이 각 주소는 해당 국가를 제공해야 합니다. 그리고 요구되는 최소한의 정보가 주어졌는지 확인하지 않습니다. 다른 모든 요소는 선택 사항입니다. 주소를 더 정확하게 설명할수록 결과의 품질이 더 좋아집니다. 전체 주소가 단일 문자열로 제공되는 경우 해당 문자열 내의 주소 요소 시퀀스는 중요하지 않습니다.
데이터 테이블에서 위치를 읽고 있고 해당 데이터 테이블에 제외된 행이 있는 경우 제외된 행 목록(excludedrows = As List( dt << Get Excluded Rows ))을 매개변수 12로 제공해야 합니다. 그렇지 않으면 반환된 목록이 데이터 테이블과 동기화되지 않을 수 있습니다. 메시지 목록에서 이러한 관찰은 "제외됨"으로 표시됩니다. 원래 데이터 테이블에 있는 것보다 더 많은 "제외된" 관찰이 있는 경우 관찰이 최소한의 위치 정보를 제공하지 못한 것입니다.
MapQuest는 미국 회사이며 제가 테스트한 모든 미국 주소에 대해 일관된 결과를 찾았습니다. 세계의 다른 지역 주소에서는 항상 그런 것은 아닙니다. 주, 지역 또는 도시와 같은 위치 정보는 종종 현지 언어로 반환되지만 때로는 결과가 영어로 반환됩니다.
이 코드가 프로젝트에 도움이 되거나 JSL 적용에 대한 통찰력을 제공할 수 있기를 바랍니다. 어떤 질문이나 제안도 환영하지만 Geocoding 2020 추가 기능의 일부이므로 해당 추가 기능에서 의도된 용도와 일치하는 변경만 수행하겠습니다.