위도와 경도로 위치를 검색하려면 좌표 쌍을 검증하고 순서를 확인한 뒤 지도를 해당 지점으로 이동하고, 필요하면 역지오코딩으로 장소 이름을 추가합니다. 가장 흔한 오류는 좌표 순서입니다. Google은 이름이 지정된 lat/lng 필드를 사용하지만 GeoJSON, Mapbox GL JS, MapLibre GL JS의 배열은 경도가 먼저입니다. 운영 도구는 값의 범위를 검증하고 원본 입력을 보존하며 빈 역지오코딩 결과를 처리하고, 반환된 주소가 지오코더의 실제 정확도보다 정밀한 것처럼 표현하지 않아야 합니다.
아래에서는 검증, 좌표 순서 계약, Google Maps·Mapbox·MapLibre 예제, 역지오코딩, GeoJSON과 일반적인 오류를 다룹니다. 제품 정보는 Kaleidr Spatial AI와 개발자 문서에서 확인할 수 있습니다. 지점을 확인한 뒤에는 주변 장소 지도의 검색 출발점으로 사용할 수 있습니다.
좌표 검색 핵심 원칙
- 먼저 검증: 위도는 -90
90, 경도는 -180180입니다.- 순서를 명확히: 이름 있는 필드는 모호함을 줄이고, 배열은 명시적인 계약이 필요합니다.
- 먼저 표시하고 보강: 정확한 지점을 그린 뒤 필요할 때 역지오코딩합니다.
- 원본 보존: 주소 라벨 옆에 사용자가 입력한 좌표를 함께 표시합니다.
- API 규칙 준수: Google은
lat/lng, GeoJSON·Mapbox·MapLibre는[lng, lat]를 사용합니다.

위도와 경도로 위치를 검색하는 방법
좌표 검색은 짧고 결정적인 순서로 처리할 수 있습니다. 위도와 경도를 입력받고, 소수점 구분 기호와 공백을 정규화하고, 위도는 -9090, 경도는 -180180 범위인지 검증합니다. 그런 다음 선택한 지도 라이브러리가 요구하는 순서로 변환하고, 지도를 이동해 마커를 추가한 뒤, 필요하면 역지오코딩하고 원본 좌표와 반환된 장소 이름을 함께 표시합니다. 마지막 단계가 중요합니다. 역지오코딩은 좌표를 해석한 결과이지 좌표 자체를 대체하지 않습니다. Google은 역지오코딩을 지도 위치를 사람이 읽을 수 있는 주소로 변환하는 과정으로 설명하며, 가장 가까운 주소 지정 가능 위치에 기반한 추정값이라고 밝힙니다(역지오코딩). Mapbox도 텍스트를 좌표로 바꾸는 정방향 지오코딩과 좌표를 텍스트 설명으로 바꾸는 역지오코딩을 구분합니다(Geocoding API 이해하기).
위도는 적도에서 북쪽 또는 남쪽 위치를, 경도는 본초 자오선에서 동쪽 또는 서쪽 위치를 나타냅니다. 일반적인 십진도 지리 좌표에서 위도 범위는 -9090이고 경도 범위는 -180180입니다. 예를 들어 워싱턴 D.C.의 한 지점은 위도 38.8977, 경도 -77.0365로 표현할 수 있습니다. 값만으로는 충분하지 않으며, 애플리케이션은 어떤 값이 먼저 오는지도 알아야 합니다.
좌표 순서가 지도 검색 오류를 일으키는 이유
좌표 순서는 지도 검색이 잘못되는 가장 흔한 원인 중 하나입니다. 사람이 읽는 위도/경도 표기에서는 보통 위도를 먼저 씁니다. Google Maps의 LatLngLiteral은 이름 있는 lat와 lng 필드를 사용합니다(좌표 참고 문서). 반면 GeoJSON Point와 Mapbox GL JS 및 MapLibre GL JS의 중심 좌표는 경도-위도 배열을 사용합니다. GeoJSON RFC는 위치 배열을 경도-위도 순서로 정의하고 십진도 WGS 84 지리 좌표를 사용합니다(RFC 7946). Mapbox와 MapLibre도 배열 좌표에서 이 순서를 따릅니다. 이름 있는 필드는 모호함을 줄이지만 위치 기반 배열에는 명시적인 좌표 순서 계약이 필요합니다.

| 시스템 | 일반적인 표현 | 순서 |
|---|---|---|
| 사람이 읽는 위도/경도 | 38.8977, -77.0365 |
위도, 경도 |
Google Maps LatLngLiteral |
{ lat: 38.8977, lng: -77.0365 } |
이름 있는 필드 |
| GeoJSON Point | [-77.0365, 38.8977] |
경도, 위도 |
| Mapbox GL JS 중심 | [-77.0365, 38.8977] |
경도, 위도 |
| MapLibre GL JS 중심 | [-77.0365, 38.8977] |
경도, 위도 |
대부분의 웹 지도 좌표 검색은 WGS 84의 경도와 위도를 십진도로 사용합니다. EPSG 등록소는 WGS 84 2차원 지리 좌표계를 EPSG:4326으로 식별하고 축을 위도와 경도로 설명합니다(EPSG:4326). 그러나 GeoJSON은 위치 배열을 경도 먼저, 위도 두 번째로 정의합니다. 따라서 ‘EPSG:4326은 위도, 경도 순서’와 ‘GeoJSON 좌표는 경도, 위도 순서’라는 설명은 각 사양 안에서 모두 성립할 수 있습니다. 애플리케이션 코드는 ‘lat/lon’ 같은 기억에 의존하지 말고 실제 API나 데이터 형식의 계약을 따라야 합니다.
좌표를 파싱하고 검증하는 방법
작은 파서만으로도 사용자 입력 오류 대부분을 예방할 수 있습니다. 38.8977, -77.0365처럼 쉼표로 구분된 값, 공백으로 구분된 값 또는 별도의 위도·경도 필드를 받을 수 있습니다. 유한한 숫자 두 개만 허용하고, 위도가 -9090 또는 경도가 -180180 범위를 벗어나면 거부하며, 나머지 애플리케이션에는 이름 있는 { latitude, longitude } 필드를 반환합니다. 첫 번째 값이 위도 범위를 벗어난다는 이유만으로 두 값을 자동 교환하지 마세요. 자동 교환은 상위 데이터 오류를 숨길 수 있습니다. 수정 기능을 제공하려면 값이 뒤바뀌었을 가능성을 명시적인 제안으로 보여 주세요.
function parseCoordinatePair(input) {
const parts = input
.trim()
.split(/[\s,]+/)
.filter(Boolean);
if (parts.length !== 2) {
throw new Error("Enter exactly two coordinate values.");
}
const latitude = Number(parts[0]);
const longitude = Number(parts[1]);
if (!Number.isFinite(latitude) || !Number.isFinite(longitude)) {
throw new Error("Coordinates must be valid numbers.");
}
if (latitude < -90 || latitude > 90) {
throw new Error("Latitude must be between -90 and 90.");
}
if (longitude < -180 || longitude > 180) {
throw new Error("Longitude must be between -180 and 180.");
}
return { latitude, longitude };
}
기본적인 접근성 폼은 자리표시자만 사용하지 말고 눈에 보이는 레이블을 제공해야 합니다. 두 필드에 inputmode="decimal"을 지정하고 제출 컨트롤과 role="status" 상태 영역을 두어 키보드 및 스크린 리더 사용자도 마커 이동을 보는 사용자와 같은 피드백을 받도록 합니다. 텍스트 좌표는 지도 캔버스 밖에도 표시하고 복사 완료 피드백을 제공하며, 마커 끌기만을 좌표 편집의 유일한 방법으로 요구하지 마세요.
Google Maps, Mapbox, MapLibre의 차이
Google Maps JavaScript API는 지리 지점을 LatLng 또는 LatLngLiteral로 표현하므로, 이름 있는 lat와 lng 필드를 사용하면 배열 순서의 모호함을 피할 수 있습니다. 현재 Google 문서는 최신 마커 작업에 Advanced Markers를 권장합니다(마커 추가). 검증 후 { lat, lng }로 지도를 이동하고 마커를 생성하거나 옮깁니다. 데모 설정은 프로젝트 전용으로 제한한 Google Maps 키와 필요한 운영 지도 ID로 교체해야 합니다.
Mapbox GL JS는 지도 중심과 마커 좌표에 [longitude, latitude]를 사용합니다(Mapbox GL JS; 마커). 배열을 [longitude, latitude]로 만들고 setLngLat을 호출한 다음 같은 지점으로 flyTo합니다. 주소 조회에는 허가된 Mapbox 지오코딩 제품을 사용해야 합니다. Mapbox는 역지오코딩을 지리 좌표를 텍스트 설명으로 변환하는 과정으로 설명합니다.
MapLibre GL JS도 경도-위도 배열을 사용합니다(LngLat; Marker). MapLibre 문서는 GeoJSON 사양에 맞추기 위해 경도-위도 순서를 사용한다고 명시합니다. MapLibre는 렌더러이지 범용 지오코딩 제공자가 아닙니다. 승인된 지오코딩 서비스를 별도로 연결하고 해당 제공자의 라이선스, 저작자 표시, 저장 및 자격 증명 요구 사항을 준수해야 합니다.

function showGoogleCoordinate(latitude, longitude) {
const position = { lat: latitude, lng: longitude };
map.setCenter(position);
map.setZoom(16);
marker.position = position;
}
function showLngLatCoordinate(latitude, longitude) {
const lngLat = [longitude, latitude];
marker.setLngLat(lngLat);
map.flyTo({ center: lngLat, zoom: 16, essential: true });
}
역지오코딩은 언제 실행해야 할까?
마커는 좌표가 어디에 있는지 보여 줍니다. 지점을 표시한 뒤 역지오코딩을 실행하면 가까운 사람이 읽을 수 있는 주소나 행정구역을 추가할 수 있습니다. 원본 좌표와 가장 가까운 반환 주소를 모두 표시하고, 결과가 비어 있어도 마커를 제거하지 마세요. Google은 역지오코딩이 정확한 일대일 변환이 아니며 도로명 주소부터 동네, 도시, 카운티, 주까지 여러 지리 수준의 결과를 반환할 수 있다고 설명합니다(Maps JavaScript 역지오코딩 예제).

이 흐름들은 서로 반대되는 문제를 해결합니다. 정방향 지오코딩은 주소나 장소 이름을 좌표와 후보로 변환하고, 역지오코딩은 좌표를 사람이 읽을 수 있는 맥락으로 변환합니다. 직접 좌표 검색은 좌표에서 정확한 지도 지점을 표시합니다. 주변 검색은 좌표나 장소를 출발점으로 삼고 조건에 맞는 가까운 장소를 반환합니다. 사용자가 이미 좌표를 갖고 있다면 지점을 표시하기 전에 지오코딩하지 마세요. 정확한 좌표를 먼저 표시하고 역지오코딩은 선택적 보강으로 사용합니다. 좌표가 검색 출발점이 되면 주변 장소를 검색해 거리나 이동 시간으로 순위를 정하고 사용자가 결과를 좁힐 수 있습니다.
좌표를 검증한 뒤 GeoJSON Point로 만들면 여러 웹 지도 시스템 사이에서 이동할 수 있는 이식성 높은 지리 객체가 됩니다. 좌표 배열은 다시 [longitude, latitude] 순서입니다. 유용한 도구는 위도/경도 복사, 경도/위도 복사, GeoJSON 복사, 공유 URL 복사, 현재 지도에서 열기, 역지오코딩, 프로젝트에 지점 추가 기능을 제공할 수 있습니다.
function toGeoJSONPoint(latitude, longitude) {
return {
type: "Feature",
geometry: {
type: "Point",
coordinates: [longitude, latitude]
},
properties: {
source: "coordinate-search"
}
};
}
DMS, UTM, 정밀도와 AI는 어떻게 다뤄야 할까?
많은 좌표 검색은 십진도를 사용하지만 사용자가 도·분·초(DMS) 표기로 입력할 수도 있습니다. 변환식은 도 + 분/60 + 초/3600이며 서쪽과 남쪽에는 음수 부호를 적용합니다. 운영 도구에서 DMS를 허용하려면 반구 문자, 유니코드 도 기호, 초 누락, 음수 부호와 반구 접미사의 중복, 60 이상인 잘못된 분·초, 지역화까지 충분히 테스트해야 합니다. 좌표를 조용히 잘못 해석하는 파서보다 범위가 작아도 신뢰할 수 있는 십진도 도구가 낫습니다.
UTM은 위도와 경도 대신 투영된 동향값과 북향값을 사용합니다. EPSG 등록소는 WGS 84 / UTM을 여러 존으로 나뉜 미터 기반 투영 좌표 참조 체계로 정의합니다. 따라서 UTM 검색에는 존과 반구 또는 모호하지 않은 CRS 식별자가 필요하며, 동향값과 북향값을 위도와 경도로 취급해서는 안 됩니다. 소수 자릿수가 많으면 표현이 더 세밀해 보이지만 측정 정확도가 그만큼 높다는 뜻은 아닙니다. 작업에 맞는 표시 정밀도를 선택하고 저장된 전체 좌표를 보존하며, 숫자에 소수점이 많다는 이유만으로 센티미터 정확도를 홍보하지 마세요.
좌표 조회 자체에는 AI가 필요하지 않습니다. 결정적인 순서는 파싱, 검증, 표시, 선택적 역지오코딩입니다. AI는 지리 지점이 확정된 뒤 좌표 주변의 장소, 자동차로 갈 수 있는 식료품점, 동네 맥락, 해당 지점과 공항 사이의 호텔 또는 후보 부지 비교 같은 질문에 유용합니다. Kaleidr Spatial AI는 질문 기반 장소 탐색을 지원합니다. 개발자는 기존 Mapbox, Google Maps 또는 MapLibre 지도에 Kaleidr Chat을 연결해 확정된 좌표를 자연어 탐색의 맥락으로 사용할 수도 있습니다. 자세한 내용은 Mapbox, Google Maps, MapLibre에 AI 채팅 추가를 참조하세요. 기존 렌더러가 계속 지도를 소유하며, 장소와 경로에 관한 사실은 권위 있는 서비스가 담당해야 합니다.
가장 중요한 실수와 예외 상황
| 실수 | 발생하는 문제 | 권장 수정 방법 |
|---|---|---|
| 모든 API가 위도를 먼저 쓴다고 가정 | 지점이 다른 국가에 표시되거나 검증에 실패 | 경계마다 좌표 순서를 문서화 |
| 입력을 조용히 교환 | 상위 데이터 오류가 드러나지 않음 | 명시적인 교환 제안 제공 |
| 표시 전에 역지오코딩 | 모호한 주소가 정확한 좌표를 대체 | 먼저 표시하고 나중에 보강 |
| 역지오코딩을 정확한 값으로 취급 | 인근 주소를 정확한 지점으로 오인 | 원본 좌표와 반환 라벨을 함께 표시 |
| 형식화된 주소만 저장 | 정밀도와 상호 운용성이 손실 | 원본 좌표와 안정적인 ID 보존 |
| 유효하지 않은 범위 허용 | 렌더러가 값을 제한하거나 반복해 예측 불가 | 제공자 호출 전에 검증 |
| MapLibre를 지오코더로 취급 | 주소 조회 데이터 소스가 없음 | 승인된 지오코딩 서비스를 별도로 연결 |
GeoJSON에 [lat, lng] 사용 |
데이터가 잘못된 위치로 이동 | GeoJSON에서는 [lng, lat] 사용 |
| 모든 출력을 캔버스 안에 숨김 | 접근성과 검색 노출이 저하 | 지도 옆에 텍스트 결과 표시 |
| 과도한 정확도 주장 | UI가 원본의 정확도를 과장 | 숫자 정밀도와 측정 정확도를 구분 |
좌표가 뒤바뀐 경우에는 명시적인 교환 제안을 제공하고, 범위를 벗어난 값은 거부하세요. 0,0은 유효한 값으로 유지하되 데이터 품질 작업에서는 표시할 수 있어야 합니다. 역지오코딩 결과가 비어 있어도 지점을 제거하지 말고, 바다나 외딴 좌표를 억지로 도로명 주소에 맞추지 마세요. 날짜 변경선 근처에서도 원본 값을 보존하고, 좌표가 같다는 이유만으로 같은 개체라고 가정하지 말고 안정적인 레코드 ID를 사용합니다. 공개 페이지는 검색 엔진이 읽을 수 있는 텍스트로 도구를 설명해야 하며, 같은 작업의 표현마다 얇은 페이지를 만드는 것보다 강력한 도구 하나와 권위 있는 가이드 하나가 낫습니다.
최종 결론
위도와 경도로 지도를 검색하는 작업은 단순하지만 중요한 원칙을 보여 줍니다. 숫자의 의미는 이를 둘러싼 데이터 계약에 따라 달라집니다. 값을 검증하고 좌표 순서를 명시하며 정확한 지점을 먼저 표시하고, 역지오코딩은 좌표를 대체하는 값이 아니라 맥락을 보강하는 정보로 다뤄야 합니다. Google Maps는 일반적으로 lat와 lng 필드를 사용하고 GeoJSON, Mapbox, MapLibre의 좌표 배열은 경도-위도 순서입니다.
Kaleidr에서 가장 가치 있는 다음 단계는 이 결정적 검색을 AI 작업으로 바꾸는 것이 아닙니다. 좌표가 먼저 신뢰할 수 있는 지리적 기준점이 되어야 합니다. 그런 다음 Spatial AI를 통해 주변 지역, 가까운 장소, 경로와 공간 관계를 더 풍부하게 탐색할 수 있습니다.
좌표 주변 지역 탐색하기
지점을 찾은 뒤 Kaleidr Spatial AI로 주변 장소와 지리적 관계에 관한 맥락 질문을 할 수 있습니다. Kaleidr Spatial AI 열기 에서 확정된 좌표 주변을 탐색하고, 호스트가 지도를 소유하는 경우 개발자 문서를 통해 통합을 확장하세요.
자주 묻는 질문
위도와 경도로 위치를 검색하려면 어떻게 하나요?
-9090 사이의 유효한 위도와 -180180 사이의 경도를 입력하고 지도 API가 요구하는 순서로 변환한 뒤 지도를 해당 지점으로 이동하고 마커를 추가합니다. 읽기 쉬운 주소도 필요하면 역지오코딩을 선택적으로 사용합니다.
위도와 경도 중 무엇이 먼저인가요?
인터페이스에 따라 다릅니다. 사람이 읽는 좌표는 위도를 먼저 쓰는 경우가 많습니다. Google Maps JavaScript는 lat와 lng 필드를 사용하고 GeoJSON, Mapbox GL JS, MapLibre GL JS 배열은 경도가 먼저입니다.
좌표가 엉뚱한 장소를 가리키는 이유는 무엇인가요?
가장 흔한 원인은 좌표 순서가 뒤바뀐 것입니다. UTM 동향·북향 좌표 같은 투영 좌표를 십진수 위도·경도로 오인하는 등 좌표 참조 체계가 잘못된 경우도 있습니다.
역지오코딩이란 무엇인가요?
역지오코딩은 지리 좌표를 사람이 읽을 수 있는 주소나 지리 설명으로 변환합니다. 결과는 제공자의 데이터와 일치 규칙에 기반한 추정값입니다.
GeoJSON은 위도-경도 순서인가요, 경도-위도 순서인가요?
GeoJSON 위치 배열은 경도가 먼저이고 위도가 두 번째입니다.
EPSG:4326과 GeoJSON은 같은가요?
같지 않습니다. EPSG:4326은 WGS 84 2차원 지리 좌표 참조 체계를 식별합니다. GeoJSON은 WGS 84 좌표를 사용하는 데이터 형식이지만 배열을 경도-위도 순서로 정의합니다.
UTM 좌표도 같은 방식으로 검색할 수 있나요?
직접 검색할 수는 없습니다. UTM에는 존, 반구 또는 CRS 식별자와 투영된 동향·북향 값이 필요합니다. 검증된 CRS 변환을 거친 뒤 경도와 위도로 다뤄야 합니다.
MapLibre에 역지오코딩이 포함되어 있나요?
MapLibre GL JS는 주로 렌더러입니다. 역지오코딩은 호스트 애플리케이션이 선택한 별도 서비스에서 제공합니다.
좌표를 찾을 때 AI를 사용해야 하나요?
기본 좌표 검색에는 필요하지 않습니다. 파싱, 검증, 표시와 역지오코딩은 결정적 작업입니다. 지점을 확인한 뒤 맥락이나 여러 조건을 탐색할 때 AI가 유용합니다.
Kaleidr는 좌표 중심 지도와 연동할 수 있나요?
가능합니다. 먼저 호스트 지도를 확정된 좌표에 맞춘 뒤 Kaleidr Chat을 지원되는 실시간 지도에 연결하여 지도 맥락을 반영한 위치 질문을 처리할 수 있습니다. 정확한 좌표와 장소 사실은 계속 호스트 지도와 권위 있는 서비스가 담당합니다.
참고 자료
- EPSG. WGS 84 — EPSG:4326. EPSG Geodetic Parameter Dataset. Accessed 10 August 2026. https://epsg.org/crs_4326/WGS-84.html
- Google. Coordinates — Maps JavaScript API. Accessed 10 August 2026. https://developers.google.com/maps/documentation/javascript/reference/coordinates
- Google. Reverse geocode a location — Geocoding API. Accessed 10 August 2026. https://developers.google.com/maps/documentation/geocoding/reverse-geocoding
- Google. Reverse Geocoding — Maps JavaScript API. Accessed 10 August 2026. https://developers.google.com/maps/documentation/javascript/examples/geocoding-reverse
- Google. Add a marker to a map — Maps JavaScript API. Accessed 10 August 2026. https://developers.google.com/maps/documentation/javascript/advanced-markers/add-marker
- IETF. RFC 7946: The GeoJSON Format. Accessed 10 August 2026. https://datatracker.ietf.org/doc/html/rfc7946
- Kaleidr. AI Map Platform & Spatial Intelligence. kaleidr.com. Accessed 10 August 2026. https://kaleidr.com/
- Kaleidr. AI Maps You Can Talk To — Spatial AI. kaleidr.com. Accessed 10 August 2026. https://kaleidr.com/ai
- Kaleidr. Introduction. Kaleidr Developer Docs. Accessed 10 August 2026. https://docs.kaleidr.com/
- Mapbox. Mapbox GL JS. Accessed 10 August 2026. https://docs.mapbox.com/mapbox-gl-js/
- Mapbox. Markers — Mapbox GL JS. Accessed 10 August 2026. https://docs.mapbox.com/mapbox-gl-js/guides/add-your-data/markers/
- Mapbox. Understanding the Geocoding API. Accessed 10 August 2026. https://docs.mapbox.com/help/dive-deeper/geocoding/
- MapLibre. Introduction — MapLibre GL JS. Accessed 10 August 2026. https://maplibre.org/maplibre-gl-js/docs/
- MapLibre. LngLat — MapLibre GL JS. Accessed 10 August 2026. https://maplibre.org/maplibre-gl-js/docs/API/classes/LngLat/
- MapLibre. Marker — MapLibre GL JS. Accessed 10 August 2026. https://maplibre.org/maplibre-gl-js/docs/API/classes/Marker/
@misc{ietf_geojson,
title = {RFC 7946: The GeoJSON Format},
author = {{Internet Engineering Task Force}},
note = {Accessed 10 August 2026},
url = {https://datatracker.ietf.org/doc/html/rfc7946}
}
@misc{epsg_wgs84,
title = {WGS 84 -- EPSG:4326},
author = {{EPSG}},
note = {Accessed 10 August 2026},
url = {https://epsg.org/crs_4326/WGS-84.html}
}
@misc{google_coordinates,
title = {Coordinates -- Maps JavaScript API},
author = {{Google}},
note = {Accessed 10 August 2026},
url = {https://developers.google.com/maps/documentation/javascript/reference/coordinates}
}
@misc{google_reverse_geocode,
title = {Reverse geocode a location},
author = {{Google}},
note = {Geocoding API; accessed 10 August 2026},
url = {https://developers.google.com/maps/documentation/geocoding/reverse-geocoding}
}
@misc{mapbox_geocoding,
title = {Understanding the Geocoding API},
author = {{Mapbox}},
note = {Accessed 10 August 2026},
url = {https://docs.mapbox.com/help/dive-deeper/geocoding/}
}
@misc{maplibre_lnglat,
title = {LngLat -- MapLibre GL JS},
author = {{MapLibre}},
note = {Accessed 10 August 2026},
url = {https://maplibre.org/maplibre-gl-js/docs/API/classes/LngLat/}
}