티스토리 뷰

Source : http://cafe.naver.com/gisdev.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=500

 

 

clip_image001

예제는 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;