GoogleMap연동
넥사크로플랫폼에서 GoogleMap연동하는 방법에 대해 기술합니다.
GoogleMap을 사용하는 경우에는 라이선스가 필요합니다.
(고객사에서 서비스 하는 형태에 따라 라이선스가 필요할 수 있으므로 이 부분에 대해서는
반드시 라이선스를 확인 후 사용하시기 바랍니다.)
준비작업
Map을 사용하기 위해서는 TypeDefinition에 Map을 정의해 주서야 합니다.
Web browser방식(기존 html5)
주요 소스 내용
//Map 좌표 this.fs_srcLatitude = "37.576683"; this.fs_srcLongitude = "127.025591"; this.Button00_onclick = function(obj:Button, e:nexacro.ClickEventInfo) { this.Map00.load(false, this.fs_srcLatitude, this.fs_srcLongitude); } //Map이 모두 Load된 후 Marker 처리 this.Map00_onload = function(obj:Map, e:nexacro.MapEventInfo) { var obj_mapmarker = new nexacro.MapMarker(); obj_mapmarker.location.set_latitude(this.fs_srcLatitude); obj_mapmarker.location.set_longitude(this.fs_srcLongitude); obj_mapmarker.set_text("Current position"); obj_mapmarker.set_visible(true); var tempMapMarker = this.Map00.addItem("MapMarker", obj_mapmarker); }
해당 샘플은 Web browser방식 (기존 html5) )환경에서 사용가능한 샘플입니다.
- 소스 위치
Sample\Application_Etc\np_GoogleMap.xfdl
Google맵을 연동할 수 있나요?
nexacro browser/Web browser 방식(기존 runtime/html5)
nexacro browser방식에서는 Map컴포넌트를 직접 올려 사용이 어렵습니다. C++기반의 프로그램은 구글 Map key가 있어야 사용이 가능합니다. 따라서 nexacro browser방식과 Web browser방식(기존 runtime/html5))방식에서 함께 사용할 수 있는 방법에 대해 알아보겠습니다.
해당 방법은 WebBrowser component를 사용하여 HTML소스를 호출하는 방식이기 때문에
MAP관련된 소스 작업은 별도의 HTML작업이 필요합니다.
여기에 넥사크로플랫폼 과 데이터를 주고 받을수 있도록 document.title = "load";
소스를 추가 하였습니다. HTML의 document.title이 변경이 되면 넥사크로플랫폼의 WebBrowser컴포넌트 이벤트 중 onusernotify 이벤트가 실행됩니다.
주요 소스 내용
넥사크로플랫폼 소스
this.fs_srcLatitude = "42.485374"; this.fs_srcLongitude = "-71.212316"; this.GoogleMap_onload = function(obj:Form, e:nexacro.LoadEventInfo) { this.WebBrowser00.set_url("http://localhost:8080/nexacro/nexacro/Sample/Etc/GoogleMap.html"); } this.WebBrowser00_onloadcompleted = function(obj:WebBrowser, e:nexacro.WebLoadCompEventInfo) { this.WebBrowser00.callMethod("initialize", this.fs_srcLatitude , this.fs_srcLongitude); } this.WebBrowser00_onusernotify = function(obj:WebBrowser, e:nexacro.WebTitleChangeEventInfo) { if(e.userdata == "load") { this.WebBrowser00.callMethod("set_marker", this.fs_srcLatitude , this.fs_srcLongitude); } }
GoogleMap관련 HTML소스
<!-- GoogoleMap Asynchronously Loading the API ********************************************* --> <HTML> <HEAD> <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script> <script type="text/javascript" > if (! window.NEXACROHTML) { window.NEXACROHTML = {}; } window.NEXACROHTML.FireUserNotify = function(userdata) { if (window.NEXACROWEBBROWSER) { window.NEXACROWEBBROWSER.on_fire_onusernotify(window.NEXACROWEBBROWSER, userdata); } else { window.document.title = userdata; } } </script> <script type="text/javascript"> var map ; function initialize(a,b) { var mapLocation = new google.maps.LatLng(a, b); // 지도에서 가운데로 위치할 위도와 경도 var mapOptions = { center: mapLocation, // 지도에서 가운데로 위치할 위도와 경도(변수) zoom: 18, // 지도 zoom단계 mapTypeId: google.maps.MapTypeId.ROADMAP }; map = new google.maps.Map(document.getElementById("map-canvas"), // id: map-canvas, body에 있는 div태그의 id와 같아야 함 mapOptions); window.NEXACROHTML.FireUserNotify("load"); } function set_marker(a, b ){ var markLocation = new google.maps.LatLng(a, b); // 마커가 위치할 위도와 경도 var size_x = 60; // 마커로 사용할 이미지의 가로 크기 var size_y = 60; // 마커로 사용할 이미지의 세로 크기 // 마커로 사용할 이미지 주소 var image = new google.maps.MarkerImage( 'http://www.larva.re.kr/home/img/boximage3.png', new google.maps.Size(size_x, size_y), '', '', new google.maps.Size(size_x, size_y)); var marker; marker = new google.maps.Marker({ position: markLocation, // 마커가 위치할 위도와 경도(변수) map: map, icon: image, // 마커로 사용할 이미지(변수) //info: '말풍선 안에 들어갈 내용', title: '서대전네거리역이지롱~' // 마커에 마우스 포인트를 갖다댔을 때 뜨는 타이틀 }); var content = "투비소프트"; // 말풍선 안에 들어갈 내용 // 마커를 클릭했을 때의 이벤트. var infowindow = new google.maps.InfoWindow({ content: content}); google.maps.event.addListener(marker, "click", function() { infowindow.open(map,marker); }); } </script> </HEAD> <BODY > <div id="map-canvas" style="width: 100%; height: 400px"></div> </BODY> </HTML>
- 소스 위치
Sample\Application_Etc\np_GoogleMap2.xfdl, Sample\Application_Etc\GoogleMap.html