본문 바로가기

관심꺼리.log/정신노동.dat

파워빌더에서 GoogleMapAPI사용 예제

파워빌더 11 제품발표 세미나에서 David Fish가 데모로 보여줬던 구글맵 API를 파워빌더에서 사용하는 예제 샘플을 파워빌더 10.5로 다운그레이드해 보았다. 원래 파워빌더 11로 .NET Web Form으로도 배포가능하도록 소스가 되어 있었으나 10.5로 다운그레이드 하면서 관련 기능은 지원하지 않는다. 하지만 uo_googlemap_api라는 NVO는 10.5이전 버젼에서도 유용하게 사용될 수 있을 것같다.
10.5 이전 버젼사용자를 위해 모든 object를 export해서 함께 압축파일을 만들었다. 9이전 버젼 사용자들은 ANSI파일을 export하시길 바란다. 또한 d_pb11_cities.srd 파일을 열어서 2라인의 release 10.5; 부분을 사용하는 버젼에 맞게 수정하고 export하시길 바란다.




PowerBuilder 11!버튼은 파워빌더 11버젼 제품 발표 세미나에서 데모로 보여주었던 John Strono와 David Fish가 파워빌더11 발표를 위해 돌아다닌 지역의 마크를 표시하는 기능을 한다. 여기서 DB의 값을 읽어서 Marker를 표시하게 되는데 w_googlemaps_demo.init_db에 DB 접속 정보를 사용하고자 하는 DB로 수정하고, 샘플소스를 다운로드해서 압축을 풀면 db폴더 아래의 cities.sql파일이 있는데 이것을 사용하는 DB에서 실행하여 테이블(cities)과 데이터를 생성하고, PowerBuilder 11!버튼을 클릭하면 실행되는 것을 확인 할수가 있다.

기본적인 로직은 특정폴더에 Google Maps API를 이용하여 html파일(이 데모에선 C:\defaultmap.htm)을 생성하고, 생성된 html파일을 브라우징 하는 방식으로 되어있다. 이 원리를 이용하여 데모로 제공되던 소스를 Google Maps API를 참고 하여 약간 수정해 보았다. 지도를 클릭하면 마크가 추가되도록 했고, 마크를 Drag/Drop으로 이동할 수 있도록 하는 기능도 함께 추가해 보았다. Google Maps API를 자세히 분석한 다면 다양한 기능의 함수를 더 추가할 수 있을 것 같다.

uo_googlemap_api 함수 Prototypes

설정함수
set_dragging (boolean value) : 지도를 Drag/Drop으로 이동하는 기능 사용여부 Set함수
set_infowindow (boolean value) : Marker를 클릭했을때 나타나는 InfoWindow 사용여부 Set함수
set_doubleclickzoom (boolean value) : 지도를 더블클릭하면 줌인/아웃되는 기능 사용여부 Set함수
set_continuouszoom (boolean value) : 줌될때 continuous zoom(구글어스에서 줌될때 이미지 부드럽게 나오는 것처럼 되는 기능인거 같은데 제대로 작동되지는 않았다. 이 기능을 설정하나 안하나 똑같더라는...) 기능의 사용여부 Set함수
set_maptypecontrol (boolean value) : 오른쪽 상단에 지도타입버튼 표시 여부 Set함수
set_normalmaptype () : 지도타입을 일반 지도이미지로 표시 Set함수
set_satellitemaptype () : 지도타입을 위성 지도이미지로 표시 Set함수
set_hybridmaptype () : 지도타입을 하이브리드이미지로 표시 Set함수
set_largemapcontrol (boolean value) : 왼쪽 상단에 지도이동(전,후,좌,우,중앙), 줌인, 줌아웃, 줌단계 컨트롤을 표시여부 Set함수
set_smallmapcontrol (boolean value) : 왼쪽 상단에 지도이동(전,후,좌,우), 줌인, 줌아웃 컨트롤을 표시여부 Set함수
set_smallzoomcontrol (boolean value) : 왼쪽 상단에 줌인, 줌아웃 컨트롤을 표시여부 Set함수
set_scalecontrol (boolean value) : 왼쪽 하단에 Scale 표시여부 Set함수
set_overviewmapcontrol (boolean value) : 오른쪽 하단에 Overview지도를 표시여부 Set함수
set_zoomlevel (integer value) : Zoom Level을 설정하는 Set함수
set_mapcenter (real lat, real lng) : 지도의 중앙 좌표를 설정하는 Set함수

설정값을 가져오는 Get함수

boolean dragging_enabled ()
boolean infowindow_enabled ()
boolean doubleclickzoom_enabled ()
boolean continuouszoom_enabled ()
boolean is_normalmap ()
boolean is_satellitemap ()
boolean is_hybridmap ()
boolean has_largemapcontrol ()
boolean has_smallmapcontrol ()
boolean has_smallzoomcontrol ()
boolean has_scalecontrol ()
boolean has_maptypecontrol ()
boolean has_overviewmapcontrol ()
integer get_zoomlevel ()
struct_latlng get_mapcenter ()

Marker관련 함수
add_markerwithinfowindow (real lat, real lng, string info) : Marker추가하고, InforWindow까지 추가하는 함수
add_marker (real lat, real lng) : Marker만 추가하는 함수
remove_all_markers () : 설정된 모든 Marker를 제거하는 함수

html파일 Generation 함수
rendermapcontrols () : 지도의 컨트롤 표시 설정에 따라 html코드 생성 함수
rendermapcenter () : 지도의 중앙좌표를 설정하는 html코드 생성 함수
rendermaptype () : 지도타입을 설정하는 html코드 생성 함수
rendermapconfiguration () : 지도의 Configuration을 설정하는 html코드 생성 함수
renderheader () : HTML header코드를 생성하는 함수 (rendermapclickevent함수 call 추가)
renderbody () : HTML body코드를 생성하는 함수
rendermarkers () : Marker를 추가하는 html코드 생성 함수
rendermapclickevent () : 지도 클릭시 Marker추가, Marker Drag/Drop기능 html코드 생성 함수(추가한 함수)
string render_map (integer ai_width, integer ai_height) : 지도 html파일을 생성하고 생성한 파일의 PATH를 리턴하는 함수

GeoCode관련 함수
geocode (string address) : renderceocode에서 geocode에서 조회할 주소값 설정 함수(데모에서는 미사용)
rendergeocode () : showAddress라는 javascript함수 html코드 생성 함수(데모에서는 미사용)