close

好不容易搞定開發環境,終於要進入主題了!

· 地圖!

分別又列了四個步驟:1.顯示地圖 2.定位 3.客製化Pin 4.將Pin連結資料庫

目前進度在 2.定位,可是因為地圖功能很普遍,網路上非常多教學與討論,所以找到不少範例

進度竟然還比設定開發環境快多了! 但也是經歷了不少波折...

例如一開始參考的範例是這一篇: Xamarin.Forms 地圖功能|Xamarin Research

裡面有用到Tabbed Page,icon,地圖套件,google map API Key的申請...

可是我一開始根本不知道 Tabbed Page是什麼,

而且project裡只有MainPage這種,所以先用了笨方法 button跳轉 XDD

還去搜尋了跳轉的語法來用(看我多菜! 最後地圖也成功出現了,然後我開始研究Tabbed Page

找到一個很佛心的blog將英文版手冊翻成中文,提供了許多很基礎的知識:邊緣技術宅羅根Xamarin.Forms 教學系列文

手癢癢的將我的project改成Tabbed Page形式,然後作個簡單的版面調整,看起來的確美觀多了

這過程中我使用的套件也有變更

從Xamarin.Forms.Map換成Xamarin.Forms.GoogleMaps,順便參考了作者的Demo

終於將code改成我需要的樣子了 (改久也會熟能生巧的

BUT!範例當中的地圖顯示方式是固定的,也就是說把經緯度寫進code裡了!

因此我需要另外尋找定位的方式

這部分我歷經了3次不同的參考範例

第一次是:Day27 – Xamarin.Forms新增打卡資料 Part1加入GPS打卡功能

使用的套件主要是 Xam.Plugin.Geolocator ,加上兩個附加套件 Plugin.CurrentActivityPlugin.Permissions

這個階段我很認真的在研究如何setup以及如何改才能將定位與地圖結合

不只參考了範例裡的code,以及套件作者給的sample,還加上GoogleMaps套件作者的Demo

雖然很認真的修改到沒有出現bug,但跑實機測試時,定位還是跑到大西洋去了

顯然這樣不行,或許對我來說太複雜

所以我又找到了第二份範例:Xamarin.Essentials 體驗 5 : Geolocation 地理位置

這次使用的套件簡單多了!

所以我立刻將那三個套件解除安裝,改成新的套件,然後修改一下code,就開始嘗試把範例的code套進去

因為我並不想要必須用button跟picker的功能才取得經緯度,而是直接將取得經緯度並放進地圖裡

在我修改完卻發現執行時並沒有跑到那段程式,有些不知道該如何進行下一步的時候

剛剛好讓我找到這份code:Xamarin Forms Map and Finding Location

真是天助我也!! 感謝好心人~

雖然他用的套件跟我使用的不同,但這還蠻容易改的,所以!!將將~成功定位了~~灑花~~ 

加上藍點的語法是Xamarin.forms.googlemaps套件裡的:issue#403

改完後程式碼如下:

 

using System;
using Xamarin.Forms;
using Xamarin.Forms.GoogleMaps;
using Xamarin.Essentials;
.
.
.
    public partial class MapPage : ContentPage
    {
        private double Latitude;
        private double Longitude;

        public MapPage()
        {
            InitializeComponent();
            GetLocation();
        }
        private async void GetLocation()
        {
            var request = new GeolocationRequest(GeolocationAccuracy.Best, TimeSpan.FromSeconds(10));
            var location = await Geolocation.GetLocationAsync(request);
            Latitude = location.Latitude;
            Longitude = location.Longitude;
            
            map.MoveToRegion(MapSpan.FromCenterAndRadius(new Position(Latitude, Longitude), Distance.FromKilometers(1)));   //定位ok
            map.MyLocationEnabled = true;                                                                                   //藍點ok

        }
    }
.
.
.

 因為歷經多次砍掉重練,拚拚湊湊之下我也不確定是不是最有效率的寫法

總之,可以跑出我要的結果就是了

 

但到目前為止還是有些小問題沒有解決

1.   是VS模擬器並沒有內建google play services,所以無法跑地圖

  這部分我找到的文章是說用gapps,但仍沒有反應,因為其他的模擬器可以使用,所以我就一直擱置它了

2. UWP的Map Key申請時沒看到 Universal Windows APP的選項,亂選了Public

       結果模擬器出現了 未指定MapServiceToken 我依然還沒去處理它

 

 

arrow
arrow
    文章標籤
    xamarin.forms google map api
    全站熱搜
    創作者介紹
    創作者 Erin 的頭像
    Erin

    Hi, Erin.

    Erin 發表在 痞客邦 留言(0) 人氣()