예제는 Flex로 Google Maps Flash(*.swf)을 만들어 html로 호출 함수를 만들어 델파이가 구글맵을 제어하는 예제입니다. SWF <-> Html <-> delphi 구글맵의 위치정보 읽음, 구글맵의 위치 이동, 주소찾기, 맵 형식 바꾸기, 포인트 생성, 배열로 라인/폴리곤 생성, 객체의 힌트 창 이벤트 만들기, 레이어로 구분하여 끄고 켜기 토글로 보기 등 입니다. | 첩부 파일에는 GoogleMapsFlexSource와 GoogleMaps.html 소스와 델파이 소스가 있습니다. 그 중 서로 호출하는 폴리곤 그리는 예제를 설명합니다. 1. 먼저 Flex로 Google Maps Flash(*.swf) 먼전 포인트 배열을 담을 전역변수 선언 public var latlngsArray:Array = new Array(); 배열을 지우고, 포인트를 추가하는 소스 public function FlashActionSetlatlngArray(lat : Number, lng : Number):void { var latlng:LatLng=new LatLng(lat, lng); latlngsArray.push(latlng); } public function FlashActionClearlatlngArray():void { latlngsArray.length = 0; } 배열을 읽고 폴리곤을 생성하는 소스(색상과 선 굵기, 투명도, 객체이름, 레이어 이름을 받아 만듭니다) public function FlashActionCreatePolygon(setcolorLine : Number, setcolorFill : Number, setthickness : Number, setalpha : Number, sData : String, sLayerName : String):void { //폴리곤 생성 var polygonOptions:PolygonOptions = new PolygonOptions({ strokeStyle: new StrokeStyle({ color: setcolorLine, thickness: setthickness, alpha: setalpha}), fillStyle: new FillStyle({ color: setcolorFill, alpha: setalpha}) }); var polygon:Polygon = new Polygon(latlngsArray, polygonOptions); //객체정보가 있으면 힌트 보임 if (sData != ""){ polygonOptions.tooltip=sData; }; //객체 선택시 토글 색상 변경 oldAlphaValue=setalpha; newAlphaValue=setalpha; polygon.addEventListener(MapMouseEvent.CLICK, function(e:MapMouseEvent):void{ changePolygonAlpha(polygon);}); //구글맵에 객체 추가 map.addOverlay(polygon); //레이어에 객체 추가(레이어별 관리시 사용) categories.push({"LayerName": sLayerName, "LayerType": "polygon", "LayerObjects": polygon}); } //마지막으로 html에서 사용 하도록 선언합니다 ExternalInterface.addCallback("FlashActionSetlatlngArray", FlashActionSetlatlngArray); ExternalInterface.addCallback("FlashActionClearlatlngArray", FlashActionClearlatlngArray); ExternalInterface.addCallback("FlashActionCreatePolygon", FlashActionCreatePolygon); 2. Html에 함수 연계 부분 코딩 <!--CodeS--> 배열을 지우고, 포인트를 추가하는 소스 function SetPointsArray(lat, lng) { var flash = document.getElementById("GoogleMaps"); flash.FlashActionSetlatlngArray(lat, lng); } function SetPointsArrayClear() { var flash = document.getElementById("GoogleMaps"); flash.FlashActionClearlatlngArray(); } 폴리곤 생성 호출 function FlashActionCreatePolygon(setcolorLine, setcolorFill, setthickness, setalpha, sdata, sLayerName) { var flash = document.getElementById("GoogleMaps"); flash.FlashActionCreatePolygon(setcolorLine, setcolorFill, setthickness, setalpha, sdata, sLayerName); } | 3.델파이에서 Html함수 호출 procedure TForm1.Button3Click(Sender: TObject); var StrResult: string; lat1, lng1 : Double; begin if (WebBrowserGoogleEarth.Document2 <> nil) and (WebBrowserGoogleEarth.Document2.readyState = 'complete') then begin StrResult :='SetPointsArrayClear();'; WebBrowserGoogleEarth.ExecJScript(StrResult); lat1 := 37.560327; lng1 := 126.950185; StrResult :=Format('SetPointsArray(%g, %g);', [lat1, lng1]); WebBrowserGoogleEarth.ExecJScript(StrResult); lat1 := 37.6; lng1 := 126.8; StrResult :=Format('SetPointsArray(%g, %g);', [lat1, lng1]); WebBrowserGoogleEarth.ExecJScript(StrResult); lat1 := 37.7; lng1 := 126.9; StrResult :=Format('SetPointsArray(%g, %g);', [lat1, lng1]); WebBrowserGoogleEarth.ExecJScript(StrResult); StrResult := Format('FlashActionCreatePolygon("%s","%s",%d,%g,"%s","%s");', ['0xff0000', '0xff0000',1,0.7, 'Test Polyline','Polyline Layer']); WebBrowserGoogleEarth.ExecJScript(StrResult); end; end; | |