coder's profile柯達魚PhotosBlogLists Tools Help
    June 24

    I love google map

     

    最近有個小小玩興,拿Google map來做經銷商據點分析。
    這個題目對我而言實在有點陌生,但常把玩Google maps及Yahoo maps的我,總覺得應用這些服務來做應該會很輕鬆才對,於是花了點時間嚐試了一下。

    這些電子地圖服務最令人激賞的是它們認得地址,只要是正確的地址,它們都可以明確地在地圖上定位,所以初開始時我想將地址一個個貼到Google maps,然後存到『我的地圖』,雖然可行,但做了五六個我便放棄了,用這麼笨的方法不是我的style,我想我老闆也不同意我這麼幹。

    小小爬了一下網路,找到中央研究院地理資訊科學專題研究中心 有一個批次定位處理的服務,可以以CSV格式一次丟整批的地址給它定位,定位完後可以選擇下載含WGS84座標的CSV檔或KML檔,非常方便,近千筆地址不要半小時即可搞定,真的非常非常非常好用,網址是 http://140.109.14.74/mapplet/Web2Map/csv.aspx
    image 
    我也在這個網站裡初識了KML檔,到Yahoo知識去瞧瞧,
     

    KML全名為(Keyhole Markup Language),符合目前最通行的一種文件交換語言標準XML (eXtensible Markup Language),有固定的語法與結構。KML文件跟其他XML家族最大的不同處
    是它以地理資訊的描述為主,如點、面、圖形與立體空間的定義與描述。
    而Keyhole這個字是Google收購的一家公司名稱,Google在收購Keyhole之後,將Keyhole公司原 本的服務改名為Google Earth,並且標上斗大的標語「Explore the world from your PC」,也就
    是 讓網路使用者可以在家翹著二郎腿,利用電腦與網路探索全世界的全貌。

    原來,只要將所有經銷商的定位資料放到KML裡,就可以在Google maps一次呈現出來,呵~這正是我想要的東東
    當下決定,我要使用KML這項方案來做這次的經銷商據點分析,要『Explore the retailers from my PC 』。中研院的那個網站所download的KML雖然也可以拿來直接使用,但格式不符合我的要求,於是很久沒當Coder的我,再度下海當一次Coder。
    原理其實很簡單,在KML裡一個點(或者其它物件)都叫Placemark,一個KML裡可以放很多Placemark,Google maps會解析這些Placemark把它們畫到地圖上去,一個簡單的Placemark樣子如下:
     

    <Placemark>
        <name>
            ABC經銷商
        </name>
        <description>
            <![CDATA[台北縣板橋市府中路XXX號<]]>
        </description>
        <Point>
            <coordinates>121.550599,21.889942,0
            </coordinates>
        </Point>
    </Placemark>

    KML是一個XML的檔案,name可以放那個點的名字,我放的是經銷商的店名,description可以對該點做一些細部說明,我放地址,值得一提的是它可以放html code在裡面,哇~想像到了嗎?那應用可是無限寬廣啊。再來就是point及coordinates,放的是經緯度,就是從中研院那個批次定位所得到的資料。
    說穿了一點都不難,我用Excel將所有資料按縣市別,分別放入經緯度、經銷商名、地址,用公式將上述的Placemark XML碼拼湊出來,寫個小巨集讓Excel依縣市別存檔,就這樣完成了第一個版本的地圖。
    image
    接下的事情就比較複雜了,因為想要分析有那些經銷商的據點距離太近,必須承認為了解決這個問題,原本稀疏的頭髮又掉了23根之多,同事跟我說他希望以每個點為中心畫出半徑100公尺的圓,如果有圓圈圈重疊,就表示距離太近了,很好的idea,但怎麼做啊?
    花了整整一個晚上,爬了無數網頁,終於找到一個在Google maps上畫圓網站:
    image
    指定中心點的經緯度及半徑,它就可以產生一個畫圓的KML,帥呆了。我將它產生的KML做了一番拆解,原來也是用Placemark,只不過裡頭用<Linetype>及<LineString>取代Point,數字部份則是一對對的經緯度,Google maps會將這些經緯度連起來。
    image
    一切真相大白,我只要以某一經銷商的點為圓心,每隔幾度計算一次半經100公尺的圓周經緯度,將它弄成上圖的Placemark即可,我打算畫每10度畫一個點,360度共36個點。
    怎麼算?好心的作者也不吝提供他的計算方法:
    image
    Source: http://dev.bt23.org/keyhole/circlegen/output.phps
    Forum: http://bbs.keyhole.com/ubb/showthreaded.php?Number=23634

    看不懂?我也真的看不懂,只好再發揮一下Coder的能力,依樣畫葫蘆地改寫成Excel的公式。
    我在這裡足足地被卡了兩個晚上,卡到幾乎無法入睡,原因是這個網站所提供的公式似乎只支
    援北美那個地方,台灣並不適用,在幾乎放棄的時候,靈光一現,會不是是地球東西方,或南北
    半球的關係啊?
    image

    將產生出來的各點與前面的經銷商點合併,得到的地圖顯示變成這樣:
    image 
    上面提到的那段程式碼其實真的不適合台灣用,它計算出來的經度要加個270度才會正確,
    我想是跟所處的半球有關吧,anyway,我沒去追究。

    一路走來,花了包含週末的三個整天及五個不眠不休的夜晚,終於做到了可以利用視覺來審視那些經銷據
    點太近的結果,後續應還有很大的應用空間,不過我很想感謝Google及網路上一些無私的網友,提供了非
    常多非常好的訊息,讓我這邊偷一點,那邊偷一點,解決這麼一個大的題目。謝 謝 la ~ ~ ~

    ”偷偷Solution”是我前老闆SJ的觀點,時至今日,網路上資源多,源碼也多,創意更是沒話說,許多事情
    不再需要一步一腳印地去堆積,重點變成要有想法、有創意及懂得善用網路資源來成就事情。

    . . . . . . . . . . . . . . . . . . . .
    後記: 今天跟Magyver聊天,他提到有朋友在做永慶房屋的網站,我在想將租售屋的業務跟Google map
    整合在一起,應該會有不同的風貌,關鍵技術及實作方法我都有了,你有什麼好創意,可以與我留言
    跟我聊聊,技轉給你 ~

    延伸閱讀 I love Google Map II

      

    >>>活動首頁<<<
    >>>運動彩劵<<<


    Comments (2)

    Please wait...
    Sorry, the comment you entered is too long. Please shorten it.
    You didn't enter anything. Please try again.
    Sorry, we can't add your comment right now. Please try again later.
    To add a comment, you need permission from your parent. Ask for permission
    Your parent has turned off comments.
    Sorry, we can't delete your comment right now. Please try again later.
    You've exceeded the maximum number of comments that can be left in one day. Please try again in 24 hours.
    Your account has had the ability to leave comments disabled because our systems indicate that you may be spamming other users. If you believe that your account has been disabled in error please contact Windows Live support.
    Complete the security check below to finish leaving your comment.
    The characters you type in the security check must match the characters in the picture or audio.

    To add a comment, sign in with your Windows Live ID (if you use Hotmail, Messenger, or Xbox LIVE, you have a Windows Live ID). Sign in


    Don't have a Windows Live ID? Sign up

    Picture of Anonymous
    Sept. 23
    Picture of Anonymous
    yao wrote:

    試試這個,我最近寫的google 試算表小工具
    http://gissrv4.sinica.edu.tw/webGIS/gadget/help.aspx

    有以下功能

    若僅有地址資料,

    使用 Gadget之[地址=>WGS84經緯度座標]功能 [地址=>WGS84(街道等級定位)]隱私權保護 若需作標轉換,則 Gadget提供下列功能 TWD67(TM2)=>WGS84經緯度座標 TWD97(TM2)=>WGS84經緯度座標 WGS84經緯度座標=>TWD97(TM2) WGS84經緯度座標=>TWD67 (TM2) 若需行政區屬性,則可由WGS84經緯度座標產生 現今行政區–縣市、鄉鎮、村里 日據行政區–廳、堡、庄
    及輸出網頁地圖
    Sept. 23

    Trackbacks

    The trackback URL for this entry is:
    http://coderyu.spaces.live.com/blog/cns!F2FA64914DE2718C!3362.trak
    Weblogs that reference this entry
    • None