1. 程式人生 > >C#呼叫百度地圖介面簡單示例

C#呼叫百度地圖介面簡單示例

1、首先用一個html檔案呼叫百度地圖介面(主要註冊一個序列號):

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <htmlxmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4.     <metahttp-equiv="Content-Type"content="text/html; charset=utf-8"/>
  5.     <title>
    百度地圖的Hello World</title>
  6.     <styletype="text/css">
  7.         body, html, #allmap  
  8.         {  
  9.             width: 100%;  
  10.             height: 100%;  
  11.             overflow: hidden;  
  12.             margin: 0;  
  13.         }  
  14.         #l-map  
  15.         {  
  16.             height: 100%;  
  17.             width: 78%;  
  18.             float: left;  
  19.             border-right: 2px solid #bcbcbc;  
  20.         }  
  21.         #r-result  
  22.         {  
  23.             height: 100%;  
  24.             width: 20%;  
  25.             float: left;  
  26.         }  
  27.     </style>
  28.     <scripttype="text/javascript"src="http://api.map.baidu.com/api?v=1.5&ak=6c497f51c06477544e5fa6e9bd68f7c3"
    ></script>
  29. </head>
  30. <body>
  31.     <divid="allmap">
  32.     </div>
  33. </body>
  34. </html>
  35. <scripttype="text/javascript">
  36.     //alert("Hello World");  
  37.     var map = new BMap.Map("allmap");               // 建立Map例項  
  38.     var point = new BMap.Point(121.504, 31.212);    // 建立點座標(經度,緯度)  
  39.     map.centerAndZoom(point, 11);                   // 初始化地圖,設定中心點座標和地圖大小級別  
  40.     map.addOverlay(new BMap.Marker(point));         // 給該座標加一個紅點標記  
  41.     //var traffic = new BMap.TrafficLayer();         // 建立交通流量圖層例項       
  42.     //map.addTileLayer(traffic);                     // 將圖層新增到地圖上     
  43.     map.addControl(new BMap.NavigationControl());   // 新增平移縮放控制元件  
  44.     map.addControl(new BMap.ScaleControl());        // 新增比例尺控制元件  
  45.     map.addControl(new BMap.OverviewMapControl());  //新增縮略地圖控制元件  
  46.     map.addControl(new BMap.MapTypeControl());      //新增地圖型別控制元件  
  47.     map.setCurrentCity("上海");                     //設定地圖顯示的城市  
  48.     map.enableScrollWheelZoom();                    //啟用滾輪放大縮小  
  49.     function setLocation(x,y){//引數:經緯度  
  50.          var point = new BMap.Point(x, y);     
  51.          map.centerAndZoom(point, 11);                    
  52.          map.addOverlay(new BMap.Marker(point));        
  53.     }  
  54. </script>



2、建立一個Winform專案,用一個WebBrower控制元件檢視html檔案、呼叫JavaScript程式碼
  1. using System;  
  2. using System.IO;  
  3. using System.Collections.Generic;  
  4. using System.ComponentModel;  
  5. using System.Data;  
  6. using System.Drawing;  
  7. using System.Text;  
  8. using System.Windows.Forms;  
  9. namespace BaiDuMap  
  10. {  
  11.     public partial class Form1 : Form  
  12.     {  
  13.         public Form1()  
  14.         {  
  15.             InitializeComponent();  
  16.         }  
  17.         privatevoid Form1_Load(object sender, EventArgs e)  
  18.         {  
  19.             try
  20.             {  
  21.                 //webBrowser1.Url = new Uri("http://www.2345.com");
  22.                 //這個檔案於可執行檔案放在同一目錄
  23.                 webBrowser1.Url = new Uri(Path.Combine(Application.StartupPath, "GoogleMap.htm"));  
  24.             }  
  25.             catch (Exception ex)  
  26.             {  
  27.                 MessageBox.Show(ex.Message, "異常", MessageBoxButtons.OK, MessageBoxIcon.Error);  
  28.             }  
  29.         }  
  30.         privatevoid webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)  
  31.         {  
  32.             //這裡傳入x、y的值,呼叫JavaScript指令碼
  33.             webBrowser1.Document.InvokeScript("setLocation"newobject[] { 121.504, 39.212 });  
  34.         }  
  35.     }  
  36. }  

        那麼接下來就是一些關聯性的操作。首先我建議把web的檔案放到vs中來進行修改(檔案本身以及用到的資源都要存到bin/debug中)。

這樣統一操作更容易實現。

幾個關鍵的問題在這要提一下:

問題一:webbrowser和form之間的資料傳輸問題。

問題二:如果你不會html怎麼辦?

答:http://developer.baidu.com/map/jsdemo.htm。這個是百度地圖api的demo網址,在裡面選擇你想要的功能。如果有基本的程式設計功底的,把這個加進自己的程式碼還是很容易做到的。這裡要注意以下,使用demo中的程式碼要用百度提供的key,

<script type="text/javascript" src="http://api.map.baidu.com/api?v=1.5&ak=這裡插入自己的key"></script>
<script type="text/javascript" src="http://api.map.baidu.com/library/DistanceTool/1.2/src/DistanceTool_min.js"></script>

問題三:如果form要對地圖進行操作怎麼辦?

答:將要對地圖進行的操作,寫成function函式,比如

function  getdistance()
{return result1;} 

這是一個返回值的函式,然後在form中webBrowser1.Document.InvokeScript("getdistance");就可以使地圖執行這個函式。