귀하는 손님 이십니다
로그인
회원가입
  
  델마당 공식 은행계좌
  하나은행 227-910235-83607
  예금주 이상국(운영진)
프로젝트 게시판
투표게시판
델마당소개
기초부터 활용까지! 델파이 교육 - 데브기어
 광고문의 :
자료실 자료실 입니다.
글내용 - 자료실
 [Delphi]공간정보오픈플랫폼 브이월드3D데스크톱 만들기-Base
홍성락
(홍성락)
2018-06-18 오후 5:13:27
1484회 조회


첨부파일 다운로드
WORLD_Pro_Base(1).zip
원문:http://cafe.naver.com/gisapplication/968

[Delphi]공간정보 오픈플랫폼 브이월드 3D 데스크톱 만들기 - Base
델파이 언어로 브이월드 3D Open API를 사용하여 데스크톱 프로그램 만들기 기초입니다. 
"브이월드 3D 데스크톱 API는 데스크톱 서비스로만 제공되던 데스크톱의 기능을 사용자가 원하는 형태로 활용할 수 있도록 하는 C/S용 플랫폼입니다."

* 예제 공유 목적
1. 기존 "공간정보 오픈플랫폼 브이월드 3D데스크톱 API 레퍼런스"에는
    - C#으로만 예제가 있어서, 다른 언어 특히 델파이나 C++, 베이직 등 에서 활용한 예가 없어 어려움.
    - 기존 웹형식 API인 javaScript버젼과 상이하여 별도로 라이브러리를 설치하고 함수를 익혀야 함.
2. 따라서, 타언어의 개발자는 브이월드 3D 데스크탑을 만들기 위해 "브이월드 3D지도 API 플러그인"을 설치
   하고, 웹브로우져 컴포넌트에 기존 웹형식 API인 javaScript버젼을 코딩하여 연동하였습니다.
   시스템이 불안정했고 데스크탑에서 자바스크립으로 명령을 서로 연동하느라 반응 속도나 디텔일한 명령을 
   내리기 어려웠다.

그래서 이번 예제는 델파이로  브이월드3D API javaScript버젼인 플러그인만을 사용하여 데스크톱 프로그램을 만드는 예제을 올렸습니다.
브이월드3D 플러그만 설치(별도 데스크탑용 라이브러리 설치 불필요, 브이월드 웹버젼만 한번만 실행해도 웹 플러그인을 설치함)하고 첨부파일을 기반으로 코딩하면 됩니다. 하단 소스에서는 일반 언어에서 플러그인만 사용하기 위한 몇가지 제한을 해결하기만 하면 됩니다. 


unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics,
  Controls, Forms, Dialogs, OleCtrls, ExtCtrls,
  XDWORLDPLUGINLib_TLB, ComCtrls, StdCtrls;

type
  TForm_Main = class(TForm)
    Panel_Map: TPanel;
    Panel_Menu: TPanel;
    Timer_MapInit: TTimer;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    CheckBox3: TCheckBox;
    CheckBox4: TCheckBox;
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Timer_MapInitTimer(Sender: TObject);
    procedure CheckBox4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    XDWorld_COM: TXDWorldCOM;

    procedure MyExceptionHandler(Sender : TObject; E : Exception );
  end;

var
  Form_Main: TForm_Main;

implementation

{$R *.dfm}

procedure TForm_Main.FormCreate(Sender: TObject);
begin

  //브이월드3D 플러그인의 결함이지는 몰라도 "external exception"에러 발생시 창을 띄워 멈추는 상태를 제한하기 위해

     메세지 이벤트를 내함수로 빼앗는다
  Application.OnException := MyExceptionHandler; //에러창 제거
end;

procedure TForm_Main.FormShow(Sender: TObject);
begin

  //플러그인의 3D지도 컴포넌트를 동적으로 생성해야 합니다. 
  XDWorld_COM := TXDWorldCOM.Create(nil);
  XDWorld_COM.Parent := Panel_Map;
  XDWorld_COM.Align := alClient;

  //브이월드3D 서비스 URL을 지정
  XDWorld_COM.SetServerURL('xdworld.vworld.kr:8080');

  //기본 레이어 리스트
  XDWorld_COM.SetServerLayerURL('xdworld.vworld.kr:8080', 'facility_build');
  ////XDWorld_COM.SetServerLayerURL('xdworld.vworld.kr:8080', 'hybrid_road');
  XDWorld_COM.SetServerLayerURL('xdworld.vworld.kr:8080', 'hybrid_bound');
  ////XDWorld_COM.SetServerLayerURL('xdworld.vworld.kr:8080', 'poi_base');
  XDWorld_COM.SetServerLayerURL('xdworld.vworld.kr:8080', 'poi_bound');
  XDWorld_COM.SetServerLayerURL('xdworld.vworld.kr:8080', 'poi_road');

  XDWorld_COM.getView.mapReset;


  Timer_MapInit.Enabled := true;
end;

procedure TForm_Main.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  //
end;
//********************************************************************************
procedure TForm_Main.Timer_MapInitTimer(Sender: TObject);
begin
  Timer_MapInit.Enabled := false;

  XDWorld_COM.getViewCamera.moveLonLatAlt(126.9779692, 37.566535, 1000);
end;

procedure TForm_Main.MyExceptionHandler(Sender:TObject;E:Exception);
begin
    //Do nothing
end;
//********************************************************************************
procedure TForm_Main.CheckBox4Click(Sender: TObject);
var
  ON_OFF:integer;
begin
  if(TCheckBox(Sender).Checked)then ON_OFF := XDWorld_COM.SOPVISIBLE_ON
  else ON_OFF := XDWorld_COM.SOPVISIBLE_OFF;

  if( TCheckBox(Sender).Name = 'CheckBox1')then
     XDWorld_COM.getLayerList.setVisible('facility_build', ON_OFF)
  else if( TCheckBox(Sender).Name = 'CheckBox2')then
     XDWorld_COM.getLayerList.setVisible('hybrid_bound', ON_OFF)
  else if( TCheckBox(Sender).Name = 'CheckBox3')then
     XDWorld_COM.getLayerList.setVisible('poi_bound', ON_OFF)
  else if( TCheckBox(Sender).Name = 'CheckBox4')then
     XDWorld_COM.getLayerList.setVisible('poi_road', ON_OFF);
end;


* 활용화면 : [GIS 차량 위치정보 관제시스템] http://cafe.naver.com/gisapplication/953