본문 바로가기
Programming/JavaScript

Open API 가져오기

by 한 땀; 한 땀; 2021. 8. 8.

사용한 API : https://www.vworld.kr/dev/v4dv_baseguide_s001.do

 

공간정보 오픈플랫폼 오픈API

배경지도API 1.0 레퍼런스 배경지도API 1.0 레퍼런스입니다. 소개 오픈플랫폼이 제공하는 배경지도 및 영상지도, 하이브리드 지도를 제공합니다. 요청URL을 인증받은 키값과 함께 사용자 클라이언

www.vworld.kr

참고로 vworld의 API를 사용하기 위해선 회원가입 및 인증키를 발급받아야한다.

발급할때 URL은 경로를 다 적어야한다. 만약 아래처럼 localhost:3000을 통해 웹 서버를 실행할 경우

URL은 localhost:3000 까지 적어주면 된다. 

 

통신할 수 있는 웹 서버를 만들어놓는다. 참고로 http 프로토콜을 사용해야 하므로 단순하게 html 파일을 열고 file:// 로 시작하는 경로를 URL에 작성하면 지도는 열리지 않는다.

var http = require('http');
var fs = require('fs');
var url = require('url');

http.createServer(function(request,response){
    response.writeHead(200);
    fs.readFile('map.html', (err, data) => { //map.html은 open api 데이터가 들어가 있다.
        if (err) {
          return console.error(err);
        }
        response.end(data, 'utf-8');
      });
}).listen(3000,function(){
    console.log('서버 실행 중');
});

c

 

긁어온 API를 html 파일로 만들고 인증키 발급을 통해 발급받은 인증키를 "사용자 키 값" 부분에 붙여넣기 한다.

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
    <title>2DMap</title>
    <script src="https://map.vworld.kr/js/map/OpenLayers-2.13/OpenLayers-2.13.js" type="text/javascript"></script>
    <script type="text/javascript" src="https://map.vworld.kr/js/apis.do?type=Base&apiKey=사용자 키 값"></script>
      
    <script type="text/javascript">
      var map;
        var mapBounds = new OpenLayers.Bounds(123 , 32, 134 , 43);
        var mapMinZoom = 7;
        var mapMaxZoom = 19;
 
        // avoid pink tiles
        OpenLayers.IMAGE_RELOAD_ATTEMPTS = 3;
        OpenLayers.Util.onImageLoadErrorColor = "transparent";
         
        function init(){
        var options = {
            controls: [],
            projection: new OpenLayers.Projection("EPSG:900913"),
            displayProjection: new OpenLayers.Projection("EPSG:4326"),
            units: "m",
            controls : [],
            numZoomLevels:21,
            maxResolution: 156543.0339,
            maxExtent: new OpenLayers.Bounds(-20037508.34, -20037508.34, 20037508.34, 20037508.34)
            };
        map = new OpenLayers.Map('map', options);
         
        var osm = new OpenLayers.Layer.OSM();                   
        var options = {serviceVersion : "",
            layername: "",
            isBaseLayer: false,
            opacity : 1,
            type: 'png',
            transitionEffect: 'resize',
            tileSize: new OpenLayers.Size(256,256),
            min_level : 7,
            max_level : 18,
            buffer:0};
        //======================================
        //1. 배경지도 추가하기
        vBase = new vworld.Layers.Base('VBASE');
        if (vBase != null){map.addLayer(vBase);}
        //2. 영상지도 추가하기
        vSAT = new vworld.Layers.Satellite('VSAT');
        if (vSAT != null) {map.addLayer(vSAT);};
        //3. 하이브리드지도 추가하기
        vHybrid = new vworld.Layers.Hybrid('VHYBRID');
        if (vHybrid != null) {map.addLayer(vHybrid);} 
        //4. Gray지도 추가하기
        vGray = new vworld.Layers.Gray('VGRAY');
        if (vGray != null){map.addLayer(vGray);}
        //5. Midnight지도 추가하기
        vMidnight = new vworld.Layers.Midnight('VMIDNIGHT');
        if (vMidnight != null){map.addLayer(vMidnight);}
        //===========================================
         
        map.addLayers([osm]);
 
        var switcherControl = new OpenLayers.Control.LayerSwitcher();
        map.addControl(switcherControl);
        switcherControl.maximizeControl();
 
        map.zoomToExtent( mapBounds.transform(map.displayProjection, map.projection ) );
        map.zoomTo(11);
             
        map.addControl(new OpenLayers.Control.PanZoomBar());
        //map.addControl(new OpenLayers.Control.MousePosition());
        map.addControl(new OpenLayers.Control.Navigation());
        //map.addControl(new OpenLayers.Control.MouseDefaults()); //2.12 No Support
        map.addControl(new OpenLayers.Control.Attribution({separator:" "}))
    }
   function deleteLayerByName(name){
        for (var i=0, len=map.layers.length; i<len; i++) {
            var layer = map.layers[i];
            if (layer.name == name) {
                map.removeLayer(layer);
                //return layer;
                break;
            }
        }
    }
     
    </script>
  </head>
  <body onload="init()">
    <div id="map" style="height:600px;"></div>
    <div >
        <button type="button" onclick="javascript:deleteLayerByName('VHYBRID');" name="rpg_1" >레이어삭제하기</button>
    </div>           
  </body>
</html>

'Programming > JavaScript' 카테고리의 다른 글

클로저(Closeure)  (0) 2023.11.08
Node.js 웹서버 구축  (0) 2021.08.08
JSON이란?  (0) 2021.08.04

댓글