Windows Phone 8.1地圖應用開發

來源:互聯網
上載者:User

標籤:

上班都是坐班車,很多TX肯定對租房子和買房子離班車網站近不近很上心。誰不想找個便宜的還能有班車的小區住啊(不差錢的可以直接無視我這屌絲行為了),於是我就想做一個應用,可以在使用者搜尋某個地點(比如心儀小區)時能顯示出搜尋地點附近的班車地點,另外計算下距這些班車網站都多遠。

好了,題外話說完了,下面說說開發過程吧。

自從出了universal app(跨平台 app程式),我就知道大事要發生了。微軟野心不小啊,採用universal APP 模式開發應用,使得統一應用在windows phone和windows store之間共用70%(微軟給的資料,哈哈,我可沒驗證)代碼,極大提速自己應用在平台的普及率。所以不用想了,現在搞必須直接從universal app搞起。對了,微軟還有個文檔,對universal app有這麼個說法,文章標題叫做《構建面向 Windows 和 Windows Phone 的通用 Windows 應用》,就是說 叫做通用windows應用(Universal Windows app)。這種開發方式總會成為技術主導,大家拭目以待。

又囉嗦了一堆,就在我按照Universal Windows app都建好工程,準備大幹一場時,出現第一個意外。

1第一個意外:windows phone 8.1地圖和windows 8.1地圖現在不是一回事啊

具體怎麼搜尋知道的都記不住了,就只記住結果了。隨便找一點分析下吧,windows phone 8.1開發地圖應用我們肯定會優先想到MapControl,這個類目前根據微軟文檔得到的資訊就是目前只支援Windows Phone 8.1。嘗試在windows 8.1項目中去引入MapControl和相關功能類都不行。

好吧,從知道這件事開始,我就知道我的universal windows app最核心的部分(地圖資料處理)肯定得是兩部分了。那肯定是從windows phone 8.1搞起啊。於是就有了下面文章的部分了。

2.從universal windows APP變成了windows phone 8.1 APP

請不要問我為什麼不是windows phone Silverlight 8.1 APP。我們要跟對方向Ok?以後的趨勢是基於完全的windows Runtime 架構的應用程式好麼。既然剛開始做,那麼肯定用以後會成為主流方向的那個模式啊。

好吧,到了這裡,最終決定開發的是windows phone 8.1應用程式。

3.開始建立介面吧,包括地圖地區,搜尋方塊,功能按鈕,大致就是這三塊吧。介面大致1所示:

圖1

好吧,你說看不到搜尋方塊,那是因為隱藏了啊,點擊功能按鈕地區的搜尋按鈕,就能開啟搜尋方塊了。2所示。

圖2

?

看一下UI架構,樹形結構,樹形結構是有

<Page>

????<Grid>

????????<TextBox/>

????????<StackPanel>

????????????<TextBlock/>

????????????<MapControl/>

????????</StackPanel>

????</Grid>

????<Page.BottomAppBar>

</Page.BottomAppBar>

</Page>

4.功能實現

4.1 初始化所有班車網站

這個主要是擷取各個班車網站的經緯度資訊。先是建立一個BusStation類,這個類主要是描述網站的一些資訊,包括經緯度和站名。這隻是我想到的。算是舉例子吧。對於一個產品來說,班車網站作為一個對象,其實還可以有別的屬性,比如所處街道,附近有什麼重要標誌或場所,被班車經過的時間等等,這些都可以歸屬到此班車網站上去。在項目之前,首先建立物件模型是非常重要的。只是這一點上我也還在學習,有興趣的可以看看《大象:Thinking in UML》。裡面講述了面對一個項目時如何用物件導向的觀點去分析,去建立模型對象。

有了BusStation,我們就可以將其轉化為UI相對應的對象MapIcon,給其賦予相應的屬性,然後將他們加入MapControl裡的MapElements,就可以顯示在地圖上了。

注意,MapElements可以添加的元素除了MapIcon,還包括images,和多邊形圍欄等等。

4.2 將當前地圖以老廠區為中心顯示

這個功能在開始的時候想的是以當前所在位置為中心顯示。但是這樣想過不太好。我覺得按照本來的需求沒有這個功能的需求。做了一下,覺得還是不好,現在就準備顯示是老廠區。這個功能實現最主要的就是TrySetViewAsync。她的作用就是將我們的視中心轉移到當前表徵圖地點上來。

這是一個非同步函數。充分利用了.net framework 4.5 和 Windows Runtime中對非同步支援。這項複雜的工作將會交由編譯器來搞定,我們就像是在使用同步代碼來編寫應用程式的邏輯結構,但其結果是,得到了所有非同步編程的優點,但只要付出一點點工作。

Await和async的例子可以參考http://cc.bingj.com/cache.aspx?q=.net+4.5+await+%e8%af%a6%e8%a7%a3&d=4729151226052614&mkt=zh-CN&setlang=zh-CN&w=8irFZ6SJ5uxmkYAa1kEEIGCSzmeXXwho

這裡就不多講了。

4.3 搜尋功能的實現

點擊搜尋按鈕,出現搜尋方塊,輸入搜尋文字,點擊斷行符號鍵,觸發搜尋操作。SearchTextBox_KeyUp,這個事件就是搜尋操作。利用MapLocationFinder.FindLocationsAsync我們可以擷取所有地點,然後再將其顯示在地圖上。

4.4 線路計算的實現

MapRouteFinder.GetDrivingRouteAsync利用擷取單條線路。再從中選擇我們需要的線路,並標註出來就可以了。

4.5 協助工具功能的實現

如何擷取下一個地點,放大或者縮小地圖的實現。

5.現階段的一些問題

我不知道是不是微軟API的問題,還是我沒有申請MAP key的緣故,總之,我使用MapLocationFinder搜尋時感覺不好用,搜尋出來的有時候不是想要的地點,或者乾脆搜尋不到。在MSDN裡也提問了,有人說是api還未完善所致,有的說使用bing的REST服務,容我有時間再研究了。

Windows Phone 8.1地圖應用開發

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.