GlideGeoPoint 개발자 가이드
GlideGeoPoint 개발자 가이드에는 위도와 경도 값(지오포인트) 사이의 거리를 계산하고, 지정된 지오포인트 및 반경 값 내에서 위치를 반환하고, 지원되는 GlideGeoPoint API 함수에서 제공하는 추가 기능을 사용하는 방법에 대한 정보가 포함되어 있습니다.
이를 Geo point field type 통해 위도와 경도 쌍을 단일 필드에 저장할 수 있습니다. 지오포인트는 지리적 관심 지점을 저장하거나, 두 관심 지점이 서로 얼마나 떨어져 있는지 묻거나, 다른 포인트에서 특정 거리 내에 있는 모든 포인트를 검색하려는 경우에 유용할 수 있습니다. 예를 들어 지오포인트 기능을 사용하여 고객의 모든 배송 위치를 빠르게 확인한 다음 매장과의 거리에 따라 배송비를 조정할 수 있습니다.
- 경도와 위도 값을 나타내는 한 쌍의 십진수로 구성됩니다.
- 경도 범위는 (-180, 180)입니다. 이 범위를 벗어난 모든 값은 이 범위 내의 동등한 값으로 정규화됩니다.
- 위도의 범위는 [-90, 90]입니다. 이 범위를 벗어난 모든 값은 이 범위 내의 동등한 값으로 정규화됩니다.
- 지오포인트 값은 항상 입력으로 허용되며 쉼표로 구분된 쌍("경도, 위도")으로 표시됩니다. 괄호는 선택적으로 표현식을 둘러쌀 수 있습니다.
- 경도와 위도 값은 모두 소수점 이하 6자리까지 저장됩니다.
지오포인트 데이터 유형에 대한 자세한 내용은 을 참고하세요 Function field.
이 가이드의 예제에서는 사용자 지정 테이블 u_geopoint가 필드 u_name 및 u_location로 채워져 있다고 가정합니다. 여기서 u_name 는 '문자열' 유형이고 주요 도시의 이름을 나열하고 u_location 는 'geopoint' 유형이며 각 도시의 위도/경도 지점을 각각 나열합니다.
GlideGeoPoint API를 사용하여 지오포인트 생성
GlideGeoPoint API를 사용하여 새 기록을 삽입하고 새 지오포인트를 생성합니다.
API를 GlideGeoPoint - 전역 사용하면 지오포인트 값을 설정하고 검색할 수 있습니다. 그러나 문자열 표기법 또는 GlideGeoPoint 객체를 사용하여 스크립트에서 직접 지리적 포인트를 설정하여 새 기록을 삽입하는 추가 기능을 수행할 수 있습니다.
- 문자열 표기법을 사용하여 새 기록을 삽입합니다.
- 문자열을 사용하여 지오포인트 필드
u_location의 값을 설정합니다. 문자열은 쉼표로 구분된 경도 및 위도 값 쌍으로 구성됩니다. 다음 예제에서는 문자열 표기법을 사용하여u_geopoint테이블에 새 지오포인트를 설정하는 방법을 보여 줍니다.주:GlideGeoPoint API 값은 항상 경도, 위도 순서로 나열됩니다.const longitude = "-87.628018"; const latitude = "41.885778"; const geopoint = longitude + "," + latitude; const myGeoPoint = new GlideRecord("u_geopoint"); myGeoPoint.initialize(); myGeoPoint.setValue("u_name", "Chicago"); myGeoPoint.setValue("u_location", geopoint); myGeoPoint.insert(); - GlideGeoPoint 객체를 사용하여 새 기록 삽입
- GlideGeoPoint 객체를 사용하여 지오포인트 필드
u_location의 값을 설정합니다.const longitude = -87.628018; const latitude = 41.885778; const geopoint = new GlideGeoPoint(longitude, latitude); const myGeoPoint = new GlideRecord("u_geopoint"); myGeoPoint.initialize(); myGeoPoint.setValue("u_name", "Chicago"); myGeoPoint.setValue("u_location", geopoint); myGeoPoint.insert();
GlideGeoPoint API를 사용하여 지오포인트 값 읽기
getDisplayValue() GlideGeoPoint API 함수를 사용하여 특정 테이블에서 모든 지리 지점 값을 읽습니다.
표준 GlideGeoPoint API를 사용하면 함수를 통해 지오포인트 값을 검색할 수 있습니다 GlideGeoPoint - getDisplayValue() . 그러나 전체 테이블에 정의된 모든 지오포인트를 읽을 수 있습니다. 다음 예시 스크립트는 getDisplayValue() 함수를 사용하여 'geopoint' 유형의 u_location 필드를 포함하는 u_geopoint 테이블에서 모든 기록을 검색하는 방법을 보여줍니다. 이 예제 스크립트를 자신만의 특정 사용 사례에 맞게 조정할 수 있습니다.
const myGeoPoint = new GlideRecord("u_geopoint");
myGeoPoint.query();
while (gr.next())
gs.info("Name: {0} Location: {1}",
myGeoPoint.getDisplayValue('u_name'),
myGeoPoint.getDisplayValue('u_location'));
출력은 u_geopoint 테이블의 모든 기록을 반환합니다. 지오포인트의 표시 값에는 경도와 위도가 쉼표로 구분되고 괄호로 둘러싸인 위도가 포함됩니다.
Name: London Location: (-0.189937, 51.473584)
Name: Puerto Rico Location: (-66.561301, 18.291136)
Name: Glasgow Location: (-4.223964, 55.867846)
Name: Chicago Location: (-87.628018, 41.885778)
Name: Tasmania Location: (146.757677, -42.173578)
Name: Bermuda Location: (-64.761595, 32.315798)
Name: Miami Location: (-80.206458, 25.767242)
Name: Sydney Location: (151.205230, -33.890115)
Name: Perth Location: (115.871253, -31.971583)
Name: Dublin Location: (-6.304994, 53.348317)
두 지리 포인트 사이의 거리 계산
distance_sphere Glide 함수를 사용하여 지오포인트 사이의 거리를 미터 단위로 반환합니다.
지오포인트 글라이드 함수 distance_sphere를 사용하면 두 지오포인트 사이의 거리를 계산할 수 있습니다. 이 함수는 미터 단위의 거리를 반환합니다. distance_sphere 테이블에서 또는 스크립트를 통해 함수 필드 요소를 정의하는 데 사용할 수 있습니다. 세 가지 구문이 지원되며 모든 매개 변수가 필요합니다.
GlideFunction:distance_sphere(geopoint1, geopoint2)glidefunction:distance_sphere(geopoint1, 경도2, 위도2)활공 기능:distance_sphere(경도1, 위도1, 경도2, 위도2)
이러한 구문을 사용할 때는 다음 사항에 유의하십시오.
- geopoint1 및 geopoint2는 'geopoint' 유형의 테이블 요소입니다.
- 경도 1, 경도 2, 위도 1, 위도 2는 숫자 테이블 요소 또는 상수입니다.
- 모든 경우에 이 함수의 반환 값은 두 지오포인트 사이의 거리를 미터 단위로 나타내는 10진수입니다
다음 예제 스크립트는 u_geopoint 테이블의 u_location 필드에 저장된 모든 지오포인트와 경도 -0.189937, 위도 51.473584 포인트(대략 런던의 위치) 사이의 거리를 계산하는 distance_sphere 함수를 정의합니다. 결과를 생성하기 위해 함수가 GlideRecord 쿼리에 추가됩니다.
const distToLondon =
"glidefunction:distance_sphere(u_location, '-0.189937', '51.473584')";
const myGeoPoint = new GlideRecord('u_geopoint');
gr.addFunction(distToLondon);
gr.query();
while(myGeoPoint.next())
gs.info("Name: {0} Dist to London(m): {1}",
myGeoPoint.u_name, gr.getValue(distToLondon));
출력에는 런던과 u_location 필드의 도시 간 거리가 미터 단위로 나열됩니다.
Name: London Dist to London(m): 0
Name: Glasgow Dist to London(m): 555985.58456358
Name: Dublin Dist to London(m): 464000.328892816
Name: Miami Dist to London(m): 7123803.25406323
Name: Bermuda Dist to London(m): 5547607.95564083
Name: Puerto Rico Dist to London(m): 6799201.00905107
Name: Perth Dist to London(m): 14485217.5596414
Name: Sydney Dist to London(m): 17001034.4875494
Name: Tasmania Dist to London(m): 17324634.4559516
두 지리 포인트 사이의 거리를 필터링합니다.
DISTANCE_SPHERE_WITHIN 쿼리 조건을 사용하여 정의된 위도, 경도점의 반경 내에 지오포인트 값이 있는 기록을 필터링합니다.
DISTANCE_SPHERE_WITHIN 구문 geopointDISTANCE_SPHERE_WITHINlongitude,latitude<radius를 따라야 합니다.
geopoint는 geopoint 필드입니다.경도와위도는10진수 상수입니다.radius는 10진수 상수(미터)입니다.
DISTANCE_SPHERE_WITHIN는 요청에서 킬로미터 또는 미터 값을 허용하지만 항상 미터 단위의 출력 값을 반환합니다.
다음 예제 스크립트는 경도 -0.189937, 위도 51.473584(대략 런던의 위치) 지점에서 u_location 1,000,000km 미만인 레코드만 반환하는 인코딩된 쿼리를 작성하는 방법을 보여 줍니다. 실행되면 런던의 지정된 반경 내에 있는 도시를 나타내는 세 개의 기록이 반환됩니다.
const myGeoPoint = new GlideRecord("u_geopoint");
myGeoPoint.addEncodedQuery("u_locationDISTANCE_SPHERE_WITHIN-0.189937,51.473584<1000000");
myGeoPoint.query();
while(gr.next())
gs.info("Name:" + myGeoPoint.getDisplayValue("u_name")
+ " Location:" + myGeoPoint.getDisplayValue("u_location"));
출력:
Name:London Location:(-0.189937, 51.473584)
Name:Dublin Location:(-6.304994, 53.348317)
Name:Glasgow Location:(-4.223964, 55.867846)
다음 예시 스크립트는 첫 번째 예시 스크립트와 동일하지만 GlideRecord에 대한 대체 구문을 사용합니다.
const myGeoPoint = new GlideRecord("u_geopoint");
myGeoPoint.addQuery("u_location", "DISTANCE_SPHERE_WITHIN", "-0.189937,51.473584<1000000");
myGeoPoint.query();
while(myGeoPoint.next())
gs.info("Name:" + myGeoPoint.getDisplayValue("u_name")
+ " Location:" + myGeoPoint.getDisplayValue("u_location"));
출력:
Name:London Location:(-0.189937, 51.473584)
Name:Dublin Location:(-6.304994, 53.348317)
Name:Glasgow Location:(-4.223964, 55.867846)