Changes between Version 7 and Version 8 of oid/WorkLog/08-09-19


Ignore:
Timestamp:
Sep 19, 2008, 3:24:17 PM (16 years ago)
Author:
jazz
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • oid/WorkLog/08-09-19

    v7 v8  
    110110  }
    111111}}}
     112
     113== 實驗跨站取得 XML 資料 ==
     114
     115 * 首先把 !GetDataXml 設定成 "http://deepsea.biodiv.tw/getdeepstaxml.asp", 把 HTML 範例改寫成
     116{{{
     117#!java
     118<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     119  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
     120<html xmlns="http://www.w3.org/1999/xhtml">
     121  <head>
     122    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
     123    <title>Google Maps JavaScript API Example</title>
     124    <script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAREq2HXjZzIdAyVORbKBYMhTGA1AmqT3f4EHIxhq9FLpYC-sN5RSNOiRjrKXraxSIlkXZKb9VzUKDWQ"
     125      type="text/javascript"></script>
     126    <script type="text/javascript">
     127    //<![CDATA[
     128    function load() {
     129      if (GBrowserIsCompatible()) {
     130        var map = new GMap2(document.getElementById("map"));  // 取得 DOM 中,名稱為 map 的元件
     131        map.addControl(new GLargeMapControl());               // 加入左上角比例尺規控制列
     132        map.addControl(new GScaleControl());                  // 加入左下角比例尺狀態列
     133        map.addControl(new GMapTypeControl());                // 加入右上角"地圖","衛星","混合地圖"按鈕
     134        map.setCenter(new GLatLng(23.8,121), 7);              // 設定預設經緯度北緯 23.8, 東經 121, 預設比例尺 100 公里(7)
     135        map.setMapType(G_SATELLITE_MAP);                      // 設定預設底圖為"衛星"
     136      }
     137      var request = GXmlHttp.create();                        // 產生一個非同步的 AJAX XMLHttp 物件
     138      var GetDataXml="getdeepstaxml.xml";
     139      request.open("GET",GetDataXml, true);                   // 用 XMLHttp 物件去開啟 getdeepstaxml.xml
     140      request.onreadystatechange = function() {               // 定義 XMLHttp 有狀態改變的事件處理函數 callback function
     141        if (request.readyState == 4) {                        // XMLHttp 的狀態是 Ready (4) 繼續處理 Server 傳回的 XML 資料
     142          var xmlDoc = request.responseXML;                   // xmlDoc = 回傳的 XML 資料
     143          var markers = xmlDoc.documentElement.getElementsByTagName("marker"); // 取出名稱為 marker 的 xml 元件, 結果是陣列
     144          for (var i = 0; i < markers.length; i++) {
     145            var points2 = [];                                 // 宣告一個空的陣列 point2 來存起始與結束座標點
     146            // 把 lat1 跟 lng1 塞進起始座標點 GLatLng 物件
     147            points2.push(new GLatLng(parseFloat(markers[i].getAttribute("lat1")),parseFloat(markers[i].getAttribute("lng1"))));
     148            // 把 lat2 跟 lng2 塞進起始座標點 GLatLng 物件
     149            points2.push(new GLatLng(parseFloat(markers[i].getAttribute("lat2")),parseFloat(markers[i].getAttribute("lng2"))));
     150            // 用 point2 產生 GPolyline 物件,畫從 point2[2] 到 point2[1] 的線條
     151            // - 參考 http://code.google.com/apis/maps/documentation/reference.html#GPolyline
     152            // - GPolyline(座標點, 顏色, 線條粗細(pixel), 透明度(0: 反鋸齒, 1: 半透明))
     153            // 然後用 addOverlay 函數把線條疊到地圖上
     154            map.addOverlay(new GPolyline(points2,'#FF0000',2,1));
     155          }
     156        }
     157      }
     158      request.send(null);                                      // 送出 XMLHttp 物件的要求
     159    }
     160    //]]>
     161    </script>
     162  </head>
     163  <body onload="load()" onunload="GUnload()">
     164    <div id="map" style="width: 800px; height: 600px"></div>
     165  </body>
     166</html>
     167}}}
     168 * 結果發現並不會正常畫出紅線, 因此用 wget 先把 XML 抓下來
     169{{{
     170#!sh
     171jazz@trac:/var/www$ wget http://deepsea.biodiv.tw/getdeepstaxml.asp
     172jazz@trac:/var/www$ mv getdeepstaxml.asp getdeepstaxml.xml
     173}}}
     174 * 再把 XMLHttp 物件要去 GET 的 URL 改為 getdeepstaxml.xml , 就可以正常看到紅線了~
     175{{{
     176#!diff
     177-      var GetDataXml="http://deepsea.biodiv.tw/getdeepstaxml.asp";
     178+      var GetDataXml="getdeepstaxml.xml";
     179}}}
     180 * [猜測] 或許為了安全性, Google Map API 所產生的 XMLHttp 物件不允許連結外部 URL