上方廣告

Lady Kukki 手作糖霜餅乾

2012年2月14日 星期二

Windows Phone 7 開發GoogleMap基礎說明

1. 要開發Bing Maps App前,必須先到官網註冊一組程式中必須使用到的Key才可以繼續進行下一個步驟。
Register Key 畫面如下:



2. 取得Key後就可以開始來開發BingMap了,首先先拉選Map物件到App之中,其實這樣就可以直接執行了,只是因為沒有加入Key,因此執行後會出現【Invalid Credentials. Sign up for a developer account at: http://www.micorsoft.com/maps/developers】的警告訊息。如果要解決問題需要在.xmal檔map的區域 屬性CredentialsProvide加上註冊的Key




3. 其他一些基本的屬性設定如下

//設定中心點
map1.Center = new GeoCoordinate(22.607090306469686, 120.3134036064148);

//設定地圖大小
map1.ZoomLevel = 15;
//顯示地圖縮放層級按鈕
map1.ZoomBarVisibility = System.Windows.Visibility.Visible;
//顯示地圖比例尺
map1.ScaleVisibility = System.Windows.Visibility.Visible;

//顯示模式設定(地面地圖模式 Default)
map1.Mode = new Microsoft.Phone.Controls.Maps.RoadMode();
//顯示模式設定(空照圖地圖模式)
map1.Mode = new Microsoft.Phone.Controls.Maps.AerialMode();


接下來還要繼續說明如何把它改造成GoogleMap的樣子,因為Windows Phone7 不像Android和iPhone本身就有提供GoogleMap的地圖,而是提供微軟的Bing Maps,因此我們還是要透過Bing地圖來達成,好在Google本身有提供取得Map Tile(地圖磚)的方式(詳細說明),以及Map物件本身就有提供讀取地圖磚集合的方式MapTileLayer.TileSources Property ,因此我們就是要運用此方式來完成。

Map物件本身有提供根據底圖的縮放層級和底圖位置擷取其URL的類別【Microsoft.Phone.Controls.Maps.TileSource】,因此我們就是要借用此類別來定義我們所需要的樣子,首先我們要先在後端程式碼定義一個繼承Microsoft.Phone.Controls.Maps.TileSource的類別GoogleTile,然後也要一併搭配調整xaml檔。
public enum GoogleTileTypes
{
    Hybrid,
    Physical,
    Street,
    Satellite,
    WaterOverlay
}

public class GoogleTile : Microsoft.Phone.Controls.Maps.TileSource
{
    private int _server;
    private char _mapmode;
    private GoogleTileTypes _tiletypes;

    public GoogleTileTypes TileTypes
    {
        get { return _tiletypes; }
        set
        {
            _tiletypes = value;
            MapMode = MapModeConverter(value);
        }
    }

    public char MapMode
    {
        get { return _mapmode; }
        set { _mapmode = value; }
    }

    public int Server
    {
        get { return _server; }
        set { _server = value; }
    }

    public GoogleTile()
    {
        UriFormat = @"http://mt{0}.google.com/vt/lyrs={1}&z={2}&x={3}&y={4}&hl=zh-TW";
        Server = 0;
    }

    public override Uri GetUri(int x, int y, int zoomLevel)
    {
        if (zoomLevel > 0)
        {
            var Url = string.Format(UriFormat, Server, MapMode, zoomLevel, x, y);
            return new Uri(Url);
        }
        return null;
    }

    private char MapModeConverter(GoogleTileTypes tiletype)
    {
        switch (tiletype)
        {
            case GoogleTileTypes.Hybrid:
                {
                    return 'y';
                }
            case GoogleTileTypes.Physical:
                {
                    return 't';
                }
            case GoogleTileTypes.Satellite:
                {
                    return 's';
                }
            case GoogleTileTypes.Street:
                {
                    return 'm';
                }
            case GoogleTileTypes.WaterOverlay:
                {
                    return 'r';
                }
        }
        return ' ';
    }
}



    
        
            
        
        
            
                
            
        
        
            
        
    


如此一來就大功告成了,結果如下圖,本篇文章就先示範到這裡,下篇我要記錄一下如何抓取GPS的訊號。


相關網站
Map Class MSDN
Map Tile 說明
使用Bing Maps來完成GoogleMap