PHP에서 구글 맵 지오코딩 API를 이용한 주소 좌표 추출 가이드
페이지 정보

본문
그누보드를 운영하거나 개발하는 과정에서 주소를 위도와 경도 좌표로 변환해야 할 때, PHP 환경에서 구글 맵 지오코딩 API를 연동하는 방법과 발생할 수 있는 설정 오류를 해결하는 방법을 얻을 수 있습니다.
PHP에서 구글 맵 지오코딩 API를 이용한 주소 좌표 추출 방법
PHP 환경에서 주소 문자열을 위도와 경도 좌표로 변환하려면 구글 지오코딩 API의 XML 또는 JSON 응답을 호출하고 파싱하는 코드를 작성해야 합니다.
1. 기본 PHP 예제 코드 (allowurlfopen = On 환경)
php.ini 파일의 allow_url_fopen 설정이 On으로 설정되어 있는 경우, simplexml_load_file 함수를 사용하여 외부 URL에서 XML 데이터를 직접 로드할 수 있습니다.
<?php
$address = "서울시 구로구 구로3동 851";
$xml = simplexml_load_file("http://maps.google.com/maps/api/geocode/xml?address=".urlencode($address)."&language=ko&sensor=false");
$lat = $xml->result->geometry->location->lat;
$lng = $xml->result->geometry->location->lng;
// 확인용 출력
// echo "lat = ". $lat."<br>";
// echo "lng = ". $lng."<br>";
?>
2. cURL을 이용한 예외 처리 (allowurlfopen = Off 환경)
allow_url_fopen이 Off인 경우에 대한 상세한 해결 방법은 아래 Q2 항목을 참고하십시오.
PHP 환경에서 php.ini의 allow_url_fopen 설정이 Off로 되어 있어 simplexml_load_file 함수를 통한 외부 URL 호출이 차단되는 경우, cURL 라이브러리를 사용하여 데이터를 로드하는 방식으로 해결할 수 있습니다.
cURL을 이용한 대체 구현 방법
ini_get('allow_url_fopen') 함수를 통해 설정을 확인하고, Off 상태일 경우 cURL을 사용하여 XML 데이터를 가져온 뒤 simplexml_load_string으로 파싱하는 예외 처리 코드를 적용합니다.
if(ini_get('allow_url_fopen')) {
$xml = simplexml_load_file("http://maps.google.com/maps/api/geocode/xml?address=".urlencode($address)."&language=ko&sensor=false");
} else {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$xml_raw = curl_exec($ch);
$xml = simplexml_load_string($xml_raw);
}
- 참고: 위 코드를 사용하려면 서버 환경에서 cURL 모듈이 활성화되어 있어야 합니다.
Google Maps JavaScript API v3를 이용한 지도 출력 및 마커·말풍선 설정 방법
PHP에서 추출한 위도($lat)와 경도($lng) 변수값을 활용하여 웹페이지에 지도를 렌더링하고 마커와 인포윈도우(말풍선)를 띄우려면 Google Maps JavaScript API v3 스크립트를 연동해야 합니다.
1. API 스크립트 로드
HTML 문서 내에 API 키를 포함한 Google Maps JavaScript API v3 스크립트를 비동기로 로드합니다.
<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap" async defer></script>
2. 지도 초기화 및 마커·말풍선 설정 자바스크립트 작성
PHP에서 구한 $lat와 $lng 값을 자바스크립트 변수에 대입하여 지도 객체와 마커, 인포윈도우를 생성합니다.
function initialize() {
var mapLocation = new google.maps.LatLng('<?php echo $lat;?>', '<?php echo $lng;?>'); // 지도 중앙 위치
var markLocation = new google.maps.LatLng('<?php echo $lat;?>', '<?php echo $lng;?>'); // 마커 위치
var mapOptions = {
center: mapLocation,
zoom: 15,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);
var size_x = 40;
var size_y = 40;
var image = new google.maps.MarkerImage('', new google.maps.Size(size_x, size_y), '', '', new google.maps.Size(size_x, size_y));
var marker = new google.maps.Marker({
position: markLocation,
map: map,
icon: image,
title: '<?php echo $address_title;?>'
});
var content = "<?php echo $address_title;?>";
var infowindow = new google.maps.InfoWindow({ content: content });
google.maps.event.addListener(marker, "click", function() {
infowindow.open(map, marker);
});
}
google.maps.event.addDomListener(window, 'load', initialize);
3. 지도 출력 영역(DOM) 배치
자바스크립트에서 지정한 map-canvas ID를 가진 div 요소를 웹페이지에 배치합니다.
<div id="map-canvas" style="width: 100%; height: 313px" title="<?php echo $address_title;?>"></div>
상황별 판단 가이드
- 내 상황: PHP 환경(그누보드 등)에서 구글 지오코딩 API를 호출해 주소를 위/경도로 변환하려 하나 위도·경도 값이 추출되지 않는 경우
- 선택 기준:
php.ini파일의allow_url_fopen설정이On인지Off인지 확인 - 다음 행동:
On상태라면simplexml_load_file함수를 통한 기본 XML 파싱 코드를 적용하고,Off상태이거나 호스팅사 정책으로 변경이 불가하다면 cURL 라이브러리를 활용한 예외 처리 코드를 적용
실전 FAQ
Q. allowurlfopen 설정이 Off인데 호스팅사에서 설정을 바꿔주지 않습니다. 어떻게 해야 하나요?
- 실행 중 막히는 지점: 원격 파일 접근이 차단되어
simplexml_load_file을 사용할 수 없습니다. - 대안: cURL 모듈을 사용하여 원격 XML 데이터를 문자열로 가져온 뒤,
simplexml_load_string함수로 파싱하는 예외 처리 방식을 적용해야 합니다.
참고자료
공식 안내
기타 참고자료
- 이전글PHP 5.3 이상에서 ereg 계열 함수를 preg 계열 함수로 마이그레이션하기 26.10.08
- 다음글PHP와 그누보드 환경에서 주요 동영상 플랫폼 URL 링크를 임베드 코드로 변환하여 출력하는 방법 26.10.08
댓글목록
등록된 댓글이 없습니다.