1 Google Maps API 概述 Web API 是通過開放的Internet 傳輸協(xié)議,以標(biāo)準(zhǔn)方式定義并提供可被其他應(yīng)用調(diào)用的服務(wù)內(nèi)容,它通過API 調(diào)用將內(nèi)容進行整合。目前架構(gòu)在Web 平臺上,以HTTP 為基礎(chǔ)的Web API的普及,也降低了應(yīng)用服務(wù)整合的門坎。 Google Maps API 是Google 為開發(fā)者提供的Maps 編程API。它允許開發(fā)者在不必建立自己的地圖服務(wù)器的情況下,將Google Maps 地圖數(shù)據(jù)嵌入到網(wǎng)站之中,從而實現(xiàn)嵌入Google Maps的地圖服務(wù)應(yīng)用,并借助Google Maps 的地圖數(shù)據(jù)為用戶提供位置服務(wù)。 Google Maps API 除了幫助開發(fā)者將地圖嵌入到Web 應(yīng)用中之外,還允許開發(fā)者利用JavaScript 腳本進行應(yīng)用開發(fā)拓展,給地圖添加標(biāo)注和折線及其他地圖圖層覆蓋物,或者響應(yīng)用戶的點擊動作,并顯示包含內(nèi)容信息在內(nèi)的氣泡提示窗口。 通過Google Maps 為開發(fā)者提供的地圖API,可以開發(fā)出各種各樣有趣的地圖Mash-up 應(yīng)用,還可以將不同地圖圖層加載到應(yīng)用中,如衛(wèi)星影像、根據(jù)海拔高度繪制的高山和植被地形圖、街道視圖等,從而幫助開發(fā)者打造個性化的地圖應(yīng)用站點。 2 通過API Key 調(diào)用Google Maps 地圖數(shù)據(jù) 站點在使用Google Maps API 之前,需要申請一個特定的Google Maps 提供的API 鑰匙。當(dāng)然,如果開發(fā)者在本地進行開發(fā)調(diào)試,也可以在不指定鑰匙的情況下使用API 來調(diào)用Google Maps地圖。 目前,來自Google 的地圖數(shù)據(jù)有兩種方式的調(diào)用形式,分別為Google Maps 和Google 中國的本地地圖。由于兩者并不是從同一個數(shù)據(jù)源進行地圖調(diào)用的,所以API Key 的申請地址也有所區(qū)別: Google Maps API Key 申請地址:http://www.google.com/apis/maps/signup.html Google 中國本地地圖API Key 申請地址:http://www.google.com/intl/zh-CN/apis/maps/ 在申請到API Key 之后,需要在調(diào)用Google 地圖的頁面中包含地圖調(diào)用所需的JavaScript代碼,即頁面需要包含指向地圖數(shù)據(jù)調(diào)用地址的script 標(biāo)記,并加上你申請的API Key。在下面的script 標(biāo)記中,將“Your_API_Key”替換為申請好的API Key 即可,頁面中的script 標(biāo)記應(yīng)該如代碼清單8-2 所示: 代碼清單8-2 <script src="http://maps.google.com/maps?file=api&v=2&key=Your_API_Key"type="text/javascript"></script> 需要注意的是,根據(jù)Google Maps API 使用條款的約定:使用Google Maps API 建立的地圖應(yīng)用必須可以讓最終用戶免費訪問,同時,開發(fā)者不得替換或遮蓋地圖上的Google 徽標(biāo)或?qū)傩?。目前,在Google Maps API 的支持之下,每個地圖API Key 每天可發(fā)出最多5 萬個地理代碼請求,而且對每天使用地圖API 生成的頁面視圖量沒有限制。Google Maps 的API 可能會定期更新,如果API 不能向后兼容,則需要在轉(zhuǎn)換期間內(nèi)及時更新網(wǎng)站,才能使用新版的API 調(diào)用Google的地圖數(shù)據(jù)。 3 Google Maps 中使用KML KML 是由Google 制定的Keyhole 標(biāo)記語言(Keyhole Markup Language),它采用XML 標(biāo)準(zhǔn)的語法格式,用于描述和保存地理位置信息(如點、線、圖像、多邊形和模型等內(nèi)容),也可以直接加載到Google Earth 或Google Maps 中顯示。開發(fā)者可以使用KML 與其他Google Earth或Google Maps 的用戶分享Google 地圖上的位置標(biāo)識。 類似于網(wǎng)頁瀏覽器處理HTML 和XML 文件的方式,Google Earth 和Google Maps 會將KML文件根據(jù)其所包含的名稱、屬性等不同的標(biāo)簽來確定地理位置信息在地圖上的顯示方式。包含地點名稱、描述及位置經(jīng)緯坐標(biāo)的簡單的KML 代碼,示例如代碼清單8-3 所示: 代碼清單8-3 <?xml version="1.0" encoding="UTF-8"?><kml xmlns="http://earth.google.com/kml/2.2"><Placemark><name>Place</name><description> Simple Place Mark.</description><Point> <coordinates>-122.0822035425683,37.42228990140251,0</coordinates></Point></Placemark></kml> 除KML 之外,Google 還有一種名為KMZ 的文件格式。KMZ 文件以壓縮包的形式存儲,不僅可以包含KML 格式文本,還可以包含圖片等其他類型的文件。 KML 和KMZ 文件都可以從Google Earth 中直接導(dǎo)出,同時,在Google Maps 中使用KML和KMZ 文件的方式十分簡單:在Google Maps 的搜索欄中輸入KML 文件的地址,然后點擊搜索,即可在地圖上加載對應(yīng)位置的地標(biāo)。 下面我們看一下Google 提供的KML 示例,將下面的KML 地址填入搜索框后點擊搜索:http://services.google.com/earth/kmz/EiffelTower.kmz 就可以在Google Maps 上得到著名的巴黎埃菲爾鐵塔所在的位置(圖無)。 Ruby 的Gem 包GeoRuby(http://georuby./)提供地理信息支持,同時也為KML格式提供導(dǎo)入和導(dǎo)出支持。除此之外,GeoRuby 還可以通過PostGIS 或MySQL 數(shù)據(jù)庫的空間拓展模塊來讀取地理信息數(shù)據(jù),以及讀寫ESRI 的Shape 格式矢量數(shù)據(jù)。GeoRuby 提供的地理信息功能相當(dāng)豐富,在使用命令gem install GeoRuby 安裝后,就可以借助GeoRuby 提供的功能來進行KML 格式的數(shù)據(jù)操作。 4 Google Maps 靜態(tài)地圖 為了方便用戶使用Google Maps 提供的地圖,Google 還提供了一種不必通過JavaScript 調(diào)用來實現(xiàn)地圖圖片調(diào)用的方式,即Google Maps 靜態(tài)地圖。通過靜態(tài)地圖提供的功能,用戶不需要動態(tài)腳本就可以在站點成功添加一幅可以定制的靜態(tài)地圖圖片。 Google Maps 提供了一個靜態(tài)地圖的輔助生成器,地址是:http://gmaps-samples./svn/trunk/simplewizard/makestaticmap.html。 通過在輔助生成器中指定經(jīng)緯度、縮放尺度、圖片大小、地圖類型、標(biāo)識點位置及調(diào)用需要的API_Key 等信息,便可以很輕松地調(diào)用所需要的地圖圖片。比方說,我們輸入地圖圖片的調(diào)用位置New York,并指定返回圖片的大小,就可以得到一幅相應(yīng)的地圖圖片(如圖8.7 所示)。填入用戶申請的Your_API_Key 之后,靜態(tài)地圖圖片對應(yīng) 的訪問地址如下: http://maps.google.com/staticmap?center=40.757929,-73.985506&markers=40.757929,-73.985506,red&zoom=13&size=500x300&key= Your_API_Key 通過對靜態(tài)地圖的API 調(diào)用,可以使傳統(tǒng)的電子地圖應(yīng)用擴展到更多領(lǐng)域,也為很多簡單的位置服務(wù)、定位,提供了更簡便直接的方法。 當(dāng)然,Google Maps 靜態(tài)地圖也有Ruby 的Gem 包static-gmaps,它幫助你實現(xiàn)靜態(tài)地圖的 API 調(diào)用:http://static-gmaps./可以直接通過命令sudo gem install static-gmaps 來安裝使用。 可以直接通過命令sudo gem install static-gmaps 來安裝使用。 在ASP.NET中使用Google Maps http://www.cnblogs.com/lilinqing/archive/2008/07/27/1252770.html 簡介 很多人都知道Google Map,其實,Google為我們自己開發(fā)應(yīng)用程序提供了豐富的API,我們只要具備一些JavaScript的知識,就完全可以利用它們。但是,對于我來說,在ASP.NET頁面中使用JavaScript來調(diào)用Google Map的API有一定難度,尤其是利用服務(wù)器端函數(shù)來動態(tài)畫出Google Map。例如,我想從SQL Server中讀取經(jīng)緯度信息,然后在Google Map中插入一個點。如果熟悉AJAX的話,很快就能得出答案。我們必須用JavaScript調(diào)用ASP.NET服務(wù)器端函數(shù),利用得到的數(shù)據(jù)來繪制Google Map。簡單吧?其實,對于我來說并非如此。因此,我決定開發(fā)一個用戶控件來處理JavaScript代碼,這樣,我就能集中精力于服務(wù)器端函數(shù)了。 特點 1.不需要JavaScript知識就能繪制Google Maps,只需在相應(yīng)頁面加入自定義控件即可。 2.使用AJAX調(diào)用來獲取服務(wù)器端數(shù)據(jù)。 3.提供最優(yōu)越的性能表現(xiàn)。 如何使用 在這里,我并不想解釋我是如何創(chuàng)建該控件的。我只要教你如何使用它。 系統(tǒng)需求 1.Visual Studio 2005或更高版本 2.Microsoft ASP.NET AJAX Extensions支持 3.Internet Explorer 7.0或Mozilla Firefox 2.x 你只需完成以下幾步: 1.新建一個ASP.NET AJAX-Enabled Website。 2.將源代碼中App_Code文件夾、GoogleMapForASPNet.ascx、GoogleMapForASPNet.ascx.cs,GService.asmx復(fù)制到你的ASP.NET應(yīng)用程序下。 3.保證你的網(wǎng)站支持AJAX技術(shù)。 4.打開Default.aspx(或任何你想加入Google Map的位置),將該自定義控件拖放至相應(yīng)位置并編譯,這樣就實現(xiàn)了最簡單的帶有Google Map的ASP.NET網(wǎng)頁。 現(xiàn)在我們來為Google Map加一些標(biāo)注點。在Page_Load()事件中加入一些代碼。 向Google Map控件傳參 注意:使用時必須首先設(shè)定你的Google Maps API key(可以從Google免費獲?。?/span> 以下是代碼: if (!IsPostBack) { GoogleMapForASPNet1.GoogleMapObject.APIKey = "<YourGoogleMapKey>"; //定義你的Google Maps API key GoogleMapForASPNet1.GoogleMapObject.APIVersion = "2"; //選擇Google Maps API版本 GoogleMapForASPNet1.GoogleMapObject.Width = "800px"; GoogleMapForASPNet1.GoogleMapObject.Height = "600px"; //定義Google Map控件的大小 GoogleMapForASPNet1.GoogleMapObject.ZoomLevel = 14; //定義縮放級別,默認(rèn)值為3 GoogleMapForASPNet1.GoogleMapObject.CenterPoint = new GooglePoint("CenterPoint", 31.19, 120.37); //定義地圖中心位置 GoogleMapForASPNet1.GoogleMapObject.Points.Add(new GooglePoint("1", 31.19, 120.37)); //在指定經(jīng)緯度定義新的地圖標(biāo)注點 } 這樣,就能自定義地圖加載位置和標(biāo)注點了。 自定義標(biāo)注點圖標(biāo) 該控件支持自定義標(biāo)注點圖標(biāo)。首先,將圖標(biāo)文件復(fù)制到你的網(wǎng)站目錄下,接著,使用以下賦值語句: GP.IconImage = "icons/pushpin-blue.png"; 還可以為標(biāo)注點添加注釋,當(dāng)用戶單擊標(biāo)注點時,能看到注釋內(nèi)容。代碼: GP.InfoHTML = "這是一個標(biāo)注點"; 至此,已經(jīng)介紹了使用Google Maps Control的基本內(nèi)容。接下來,我們來看一下它的高級功能。例如,當(dāng)用戶進行某些操作時移動標(biāo)注點。 創(chuàng)建交互式地圖 該控件支持用戶創(chuàng)建交互式地圖。下面這個例子是,當(dāng)用戶單擊按鈕時,移動標(biāo)注點。以下是使用方法: 1.插入一個Button控件,在它的Click事件中加入以下代碼: protected void Button1_Click(object sender, EventArgs e) { GoogleMapForASPNet1.GoogleMapObject.Points["1"].Latitude += 0.003; GoogleMapForASPNet1.GoogleMapObject.Points["1"].Longitude += 0.003; } 可以自主控制經(jīng)緯度的增量。 2.運行該頁面,你將發(fā)現(xiàn)整個頁面都會被刷新或回傳。為了避免這種現(xiàn)象,我們只需要把這個Button控件加入UpdatePanel控件中。 3.重新運行該頁面,可看到該頁面已經(jīng)一切正常了。 自動更新和GPS導(dǎo)航 我們可以使用AJAX框架中的Timer控件來實現(xiàn)這一功能。在Timer_Tick()事件中,可以定義標(biāo)注點新的經(jīng)度和緯度。這樣,在指定的時間間隔后,地圖上所有的標(biāo)注點都會自動更新。你也可以連接到GPS設(shè)備,構(gòu)成一個GPS導(dǎo)航系統(tǒng)。 使用Google Maps Control繪制折線 1.首先,添加該折線的各個端點。代碼如下: GooglePoint GP1 = new GooglePoint(); GP1.ID = "GP1"; GP1.Latitude = 31.19; //定義標(biāo)注點緯度 GP1.Longitude = 120.37; //定義標(biāo)注點緯度 GP1.InfoHTML = "這是標(biāo)注點1"; //可選注釋項 GoogleMapForASPNet1.GoogleMapObject.Points.Add(GP1); //在地圖上添加這個點 GooglePoint GP2 = new GooglePoint(); GP2.ID = "GP2"; GP2.Latitude = 31.19001; GP2.Longitude = 120.37001; GP2.InfoHTML = "這是標(biāo)注點2"; GoogleMapForASPNet1.GoogleMapObject.Points.Add(GP2); GooglePoint GP3 = new GooglePoint(); GP3.ID = "GP3"; GP3.Latitude = 31.19003; GP3.Longitude = 120.36998; GP3.InfoHTML = "這是標(biāo)注點3"; GoogleMapForASPNet1.GoogleMapObject.Points.Add(GP3); 2.利用這些點繪制折線 GooglePolyline PL1 = new GooglePolyline(); //定義折線 PL1.ID = "PL1"; PL1.ColorCode = "#0000FF"; //定義折線顏色 PL1.Width = 5; //定義折線寬度 PL1.Points.Add(GP1); //加入這些點(繪制折線) PL1.Points.Add(GP2); PL1.Points.Add(GP3); 3.將折線加入Google Maps Control中 GoogleMapForASPNet1.GoogleMapObject.Polylines.Add(PL1); 使用Google Maps Control繪制多邊形 1.按照上面的方法加入多邊形各頂點。這里不再贅述。 2.使用這些點創(chuàng)建一個多邊形。代碼如下: GooglePolygon PG1 = new GooglePolygon(); //定義多邊形 PG1.ID = "PG1"; PG1.FillColor = "#0000FF"; //定義多邊形各條邊的顏色 PG1.FillOpacity = 0.4; PG1.Points.Add(GP1); //將上面創(chuàng)建的各點加入多邊形(作為頂點) PG1.Points.Add(GP2); PG1.Points.Add(GP3); …………………………………… PG1.Points.Add(GPn); //第n個頂點 3.將多邊形加入Google Maps Control中 GoogleMapForASPNet1.GoogleMapObject.Polygons.Add(PG1); 信息來源: http://blog.csdn.net/eastsea/archive/2009/03/10/3975726.aspx |
|
來自: 昵稱10525020 > 《ie》