[C#]如何抓取Google Static Map

[C#]如何抓取Google Static Map

要透過Google Map抓取靜態地圖,首先我們要了解一下Google Static Maps API要怎樣使用。這部分在Static Maps API 第 2 版開發人員指南這份官方文件介紹的已經很詳細了,這邊只稍稍的略帶一下。

 

Google Static Maps API 的網址格式如下:

http://maps.google.com/maps/api/staticmap?parameters

https://maps.googleapis.com/maps/api/staticmap?parameters

 

HTTP與HTTPS兩種協定都支援,可以自行選用合適的協定。

 

參數的部分可以帶的有centet、format、size、zoom、maptype、markers、language

 

其中比較常用的像是center,可以指定地圖在顯示的中心位置。這邊可直接帶入中心點的經緯度位置(例如「40.714728,-73.998672」)或是字串地址(例如「city hall, new york, ny」)。

 

size表示地圖圖片的矩形維度,可指定地圖的水平與垂直像素。

100X100

256X256

 

zoom則是可以指定地圖縮放的層級,縮放層級介於0~21。設的值越大地圖放的越大。

zoom 12

zoom 14

 

format可指定靜態地圖的圖片格式,目前支援GIF、JPEG、與PNG三種。預設不帶是吐回png格式的地圖,若有需要變更可設定不同的format。

png (png8)

8 位元 PNG 圖檔

png32

32 位元 PNG 圖檔

gif

GIF 圖檔

jpg

JPEG 漸進式圖檔

jpg-baseline

JPEG 非漸進式圖檔

 

maptype可定義地圖的類型,像是標準道路圖、衛星圖...等,預設不帶是吐回標準道路圖。

 

roadmap

標準道路圖圖片

satellite

衛星圖片

terrain

實際立體模型地圖圖片

hybrid

衛星和道路圖的混合圖片

 

 

大概了解到這邊我們就可以對Google Static Maps API做些基本的應用了,進階的使用部分請自行參閱Static Maps API 第 2 版開發人員指南這份文件。回到本篇的主題,若是想用C#去抓取Google的靜態地圖,我們可以像下面這樣撰寫:

 

		private void Form1_Load(object sender, EventArgs e)
		{
			DownloadStaticMap(40.714728, -73.998672, "map.jpg");
		}
		...
		private void DownloadStaticMap(double latitude, double longitude, string file)
		{
			if (string.IsNullOrEmpty(file))
				throw new ArgumentNullException("file");

			if (File.Exists(file))
				return;

			
			var urlFormat = @"http://maps.google.com/maps/api/staticmap?center={0},{1}&size=640x640&format=jpg&sensor=false&markers=color:red%7Csize:mid%7Clabel:A%7C{0},{1}";
			var url = String.Format(urlFormat, latitude.ToString(), longitude.ToString());

			using (var wc = new WebClient())
			{
				wc.DownloadFile(url, file);
			}
		}

 


 

簡單的說也只是去兜Google Static Maps API的網址,然後交給WebClient去抓圖片下來而已,運行起來會在運行目錄下看到一個map.jpg,那就是我們透過程式抓取下來的靜態地圖。

map 

 

Link