繪圖管理器製作GeoJSON空間資料簡易工具

API使用範例:繪圖管理器製作GeoJSON空間資料簡易工具

情境假設:

  本範例示範如何利用TGOS MAP API所提供的元件方法來建立出繪圖管理器,讓使用者能透過簡易的工具繪製出點、線、面圖徵及設定基本的屬性內容,並產製出相對應的GeoJSON空間資料提供交換使用。

TGOS MAP API建置方式:

1.TGOS.TGOnlineMap()方法建立初始化地圖圖台介面,並透過TGOS.TGDrawing()方法建立圖形繪製操作工具。

    function InitWnd() {

                var pOMap = document.getElementById("OMap");

                pMap = new TGOS.TGOnlineMap(pOMap, TGOS.TGCoordSys.EPSG3826);

 

          pDrawingManager = new TGOS.TGDrawing();

          pDrawingManager.setMap(pMap);    

        }

 

2.為了讓使用者得以針對各個繪製出的圖徵進行屬性編輯,因此透過TGOS.TGEventaddListener()方法建立一個監聽事件來偵測點擊這個事件,當於圖台上點擊已存在的繪圖後,顯示出可輸入圖徵屬性的輸入元素及更新函式。

                var cnt = 0;

                TGOS.TGEvent.addListener(pDrawingManager, 'overlay_complete', function (e) {

                 TGOS.TGEvent.addListener(e.overlay, 'click', function () {

                                        document.getElementById("pro").style.display = "";

                                        document.getElementById("res").innerHTML = "";

                                          document.getElementById("f_input").innerHTML = "";

                                        createElem("屬性名稱");

                                        createElem("屬性內容");

                      var btn_cjson = document.createElement("button");

                      var bt = document.createTextNode("送出");

                       btn_cjson.appendChild(bt);

                      btn_cjson.id = "btn_cjson" + cnt;

                      btn_cjson.type = "button";       

                      document.getElementById("f_input").appendChild(btn_cjson);

                      btn_cjson.onclick  = function () {

                        var jsonresult = getProtoJson(document.getElementById("f_input"));

                        pDrawingManager.setGeoJsonProperties(e.overlay, jsonresult); //選取到的圖形設定JSON屬性

                        getGraphicsGeoJson();

                        return false;

                                        };

            });

            pDrawingManager.setDrawingMode(TGOS.TGOverlayType.NONE); //取消所有模式

            document.getElementById("pro").style.display = "none";

 

//建立出圖徵GeoJSON屬性的設定

  function createElem(lname)

        {

                var cid = guid();

                var newDiv1 = document.createElement("input");

                newDiv1.id = cid;

                newDiv1.type = "textbox";

                document.getElementById("f_input").appendChild(newDiv1);            

                var x = document.createElement("LABEL");

                var t = document.createTextNode(lname);

                x.setAttribute("for", cid);

                x.appendChild(t);

                document.getElementById("f_input").insertBefore(x,document.getElementById(cid));

        }

       

        function guid() {

          function s4() {

                return Math.floor((1 + Math.random()) * 0x10000)

                  .toString(16)

                  .substring(1);

          }

          return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();

        }

 

//產生GeoJSON內容的方法

      function getProtoJson(f){

         var obj = {};

                var elements = f.querySelectorAll("input");

                console.log(elements);

               

                for( var i = 0; i < elements.length; i++ ) {

                        if(i % 2 == 0)

                        {

                                var element1 = elements[i];

                                var element2 = elements[i + 1];

                                var name = element1.value;

                                var value = element2.value;

                                if( name ) {

                                        obj[ name ] = value;

                                }

                        }

                }

           return JSON.stringify( obj );

    }

 

3.建立清除圖面上所有已繪製的資料,可透過clearAllGraphics()的方法來達到這個效果,並一併將目前窗格中羅列出的GeoJson內容清除,最後再將該函式與前端按鈕元素相連結以產生操作功能。

    function clearAllGraphics() {

        pDrawingManager.clearAllGraphics(); //清除所有繪圖

                document.getElementById("f_input").innerHTML = "";

                document.getElementById("res").innerHTML ="";

    };

   

4.可透過getGeoJson()方法來取得目前pDrawingManager物件中的所有以描繪完的圖徵資料GeoJson內容,並將該函式與前端按鈕元素相連結以產生操作功能。

    function getGraphicsGeoJson() {   

        var str1 = pDrawingManager.getGeoJson("<br />");  //取得所有JSON,預設會以 \r\n 做為換行字元

        document.getElementById("res").innerHTML = str1;

    };

 

回到上方