必應(yīng)地圖 SDK擴(kuò)展整合了 Windows 8.1 和必應(yīng)地圖的強(qiáng)大功能,以將最新的道路圖和鳥瞰圖合并到你的 Windows 應(yīng)用商店應(yīng)用中。必應(yīng)地圖現(xiàn)在有了針對(duì)Windows Store App的SDK,可以很方便的把Bing地圖功能整合到自己的應(yīng)用當(dāng)中。最近參照官方說明文檔操作了一下,果然比較好用,記錄下經(jīng)過以備日后使用。
環(huán)境安裝:
操作系統(tǒng): Windows8 Pro 64bit (RTM)
開發(fā)工具: Microsoft Visual Studio Professional 2012(RTM)
SDK: Bing Maps SDK for Windows Store apps
注:如果操作系統(tǒng)是Windows 8 Release Preview,需要安裝對(duì)應(yīng)的預(yù)覽版用SDK Bing Maps SDK for Windows Store apps
安裝bing maps sdk:
在【工具】里找到【擴(kuò)充功能和更新】
選取左側(cè)的【線上】,之后在右上方中的搜尋輸入【bing maps】就會(huì)顯示第一個(gè)【bing maps sdk for windows store apps】并下載
安裝完成后需重新啟動(dòng),再新增專案里就可以看見剛剛按裝的【bing maps application】
bing maps 的屬性:
center 取得或設(shè)置地圖的中心點(diǎn),center屬性直視精度和緯度類型的
children bing maps控制項(xiàng)的子元素
language 獲取或設(shè)定bing maps 所使用的語言
credentials 獲取或設(shè)定bing maps 身分驗(yàn)證的key
zoomlevel 獲取或設(shè)定地圖的縮放級(jí)別,級(jí)別范圍1~21
logovisibility 設(shè)置bing maps 的標(biāo)誌,visibility標(biāo)誌顯示,coolapsed標(biāo)誌隱藏
copyrightvisibility 設(shè)置bing maps 的版權(quán)訊息,visibility標(biāo)誌顯示,coolapsed標(biāo)誌隱藏
maptype 設(shè)定bing maps 的地圖顯示模式
bing maps 的事件
viewchanged 地圖改變時(shí)觸發(fā)
targetviewchanged 目標(biāo)區(qū)域改變時(shí)觸發(fā)
bing maps的方法
setview 設(shè)置bing maps顯示地圖的區(qū)域,類似center屬性
setheading 設(shè)置地圖的顯示方向
setzoomlevel 設(shè)置地圖的縮放等級(jí)
獲取Bing 地圖密鑰:
2.創(chuàng)建Bing Map Account,并創(chuàng)建Bing Map Key
登錄https://www.bingmapsportal.com,如果已經(jīng)有了一個(gè)Windows Live ID,點(diǎn)擊sign用Windows Live ID登錄并創(chuàng)建Bing Map Account。
點(diǎn)擊頁面左側(cè)[My Account]里的[Create or view keys],輸入信息后點(diǎn)擊Submit以創(chuàng)建Bing Map Key,創(chuàng)建完成后在畫面下方可以查看到生成的Bing Map Key
是一個(gè)64位英數(shù)字符號(hào)混合的字串。
獲取Bing 地圖密鑰
登陸https://www.bingmapsportal.com/
如果已經(jīng)有Windows Live ID可以直接登錄,如果沒有先注冊(cè)一個(gè)。
登陸后在左邊導(dǎo)航欄中選擇Create or view keys
在Create key 時(shí)Application type 需要選擇Windows Store app
該地圖密鑰會(huì)在后面地圖控件的屬性Credentials中用到。沒有正確的地圖密鑰地圖控件將無法正常使用。
創(chuàng)建新項(xiàng)目:
新項(xiàng)目這里取名叫“Win8BingMaps”
設(shè)置目標(biāo)平臺(tái):
在Visual Studio 菜單欄中選擇“生成”->"配置管理器"
將活動(dòng)解決方案平臺(tái)”設(shè)置為 x86 或 x64。我這邊設(shè)置成x64后,在設(shè)計(jì)視圖無法顯示地圖,但可以運(yùn)行。x86一切正常。
設(shè)置截圖如下:
六、添加Bing地圖引用
在解決方案資源管理器中,右鍵單擊“引用”并將引用添加到“Bing Maps for C#, C++, or Visual Basic”和“Microsoft Visual C++ Runtime Package”中。
截圖如下:
七、設(shè)置位置功能
打開 Package.appxmanifest 文件并轉(zhuǎn)到“功能”選項(xiàng)卡。 選擇“位置”功能。要不然就不能使用定位功能了。
3.下載官方實(shí)例 Bing Maps C# LocationTracking Sample
程序運(yùn)行前,需要先確認(rèn)References中Bing Maps Application for Windows Store的參照正確無誤。
在代碼中全局搜索INSERT_YOUR_BING_MAPS_KEY字串,使用生成的Bing Map Key替換之。
在Solution Explorer窗口中右擊Solution,從彈出菜單中選擇Properties,將Configuration Properties中的Platform由ARM改為x64。
編譯運(yùn)行。
4.代碼相關(guān)
要使用BingMap功能,最主要的就是Map控件,在XAML文件中定義入下:
[html] view plaincopy
<bm:Map x:Name="map" Credentials="INSERT_YOUR_BING_MAPS_KEY" Width="800" Height="450"/>
好了,這樣應(yīng)用中就有了最基本的Bing地圖功能了,超簡單吧。
下面是調(diào)整map屬性的代碼:
[csharp] view plaincopy
map.MapType = MapType.Road; //道路模式
map.MapType = MapType.Aerial; //航空攝影模式
map.MapType = MapType.Birdseye; //鳥瞰模式
map.Heading += 90; //逆時(shí)針旋轉(zhuǎn)90度
map.Heading -= 90; //順時(shí)針旋轉(zhuǎn)90度
TimeSpan animationDuration = new TimeSpan(0, 0, 0, 0, 500); //設(shè)定延遲加載時(shí)間
map.SetHeading(map.Heading - 90, animationDuration); //旋轉(zhuǎn)90度后延遲加載地圖
接下來結(jié)合定位功能:
[csharp] view plaincopy
LocationIcon locationIcon;
Geoposition currentPosition = await geolocator.GetGeopositionAsync();
Location location = new Location(currentPosition .Coordinate.Latitude, currentPosition .Coordinate.Longitude);
map.SetView(location, 10.0f);
現(xiàn)在地圖的中點(diǎn)就是當(dāng)前的位置了。
在地圖上添加圖釘,XAML上直接定義:
[html] view plaincopy
<bm:Map ZoomLevel="10" Credentials="INSERT_YOUR_BING_MAPS_KEY" >
<bm:Map.Center>
<bm:Location Latitude="47.610039" Longitude="-122.342207" />
</bm:Map.Center>
<bm:Map.Children>
<bm:Pushpin>
<bm:MapLayer.Position>
<bm:Location Latitude="47.610039" Longitude="-122.342207" />
</bm:MapLayer.Position>
</bm:Pushpin>
</bm:Map.Children>
</bm:Map>
在代碼中為制定坐標(biāo)添加圖釘:
[csharp] view plaincopy
MapLayer mPinLayer = new MapLayer();
map.Children.Add(mPinLayer);
LocationCollection mPolyShapeLocations = new LocationCollection();
mPolyShapeLocations.Add(new Location(15, -15));
mPolyShapeLocations.Add(new Location(30, -90));
mPolyShapeLocations.Add(new Location(-45, -15));
mPolyShapeLocations.Add(new Location(30, 90));
mPolyShapeLocations.Add(new Location(60, 60));
for (int i = 0; i < mPolyShapeLocations.Count; i++)
{
Pushpin pin = new Pushpin();
pin.Text = i.ToString();
mPinLayer.Children.Add(pin);
MapLayer.SetPosition(pin, mPolyShapeLocations[i]);
}
結(jié)合上面的代碼,設(shè)定圖釘后,再在各個(gè)指定坐標(biāo)間連線:
[csharp] view plaincopy
MapLayer mPinLayer = new MapLayer();
map.Children.Add(mPinLayer);
MapShapeLayer mShapeLayer = new MapShapeLayer();
map.ShapeLayers.Add(mShapeLayer);
LocationCollection mPolyShapeLocations = new LocationCollection();
mPolyShapeLocations.Add(new Location(15, -15));
mPolyShapeLocations.Add(new Location(30, -90));
mPolyShapeLocations.Add(new Location(-45, -15));
mPolyShapeLocations.Add(new Location(30, 90));
mPolyShapeLocations.Add(new Location(60, 60));
for (int i = 0; i < mPolyShapeLocations.Count; i++)
{
Pushpin pin = new Pushpin();
pin.Text = i.ToString();
mPinLayer.Children.Add(pin);
MapLayer.SetPosition(pin, mPolyShapeLocations[i]);
}
MapPolyline polyline = new MapPolyline();
polyline.Color = Windows.UI.Colors.Red;
polyline.Locations = mPolyShapeLocations;
mShapeLayer.Shapes.Add(mapShape);
至此,已經(jīng)對(duì)Bing Map SDK 的安裝和使用做了簡單的說明,對(duì)于Metro App中內(nèi)嵌Bing Map功能的需求,應(yīng)該可以滿足大部分的使用需要了。