2011-03-16 47 views

回答

91

Google提供免費的靜態地圖API。

您可以從網站下載動態配置的位圖,將其存儲在文件系統或內存中,然後從中獲取可繪製的圖表以將其設置爲ImageView。

您需要從座標中生成一個url,以便使用此URL從Web上加載數據。爲例爲200x200的位圖顯示在巴黎的艾菲爾鐵塔:

String latEiffelTower = "48.858235"; 
String lngEiffelTower = "2.294571"; 
String url = "http://maps.google.com/maps/api/staticmap?center=" + latEiffelTower + "," + lngEiffelTower + "&zoom=15&size=200x200&sensor=false" 

StackOverflow上已經有了關於如何從網上下載的圖像,以便在imageview的顯示它的一些答案:https://stackoverflow.com/search?q=imageview+url+%5Bandroid%5D

你可以找到這裏是Google Static Maps API的文檔。

+0

不知道......謝謝你的分享! – WarrenFaith 2011-03-17 12:19:56

+0

太棒了!我使用了第二個mapview,這給我帶來了很多麻煩(通常每個進程只能有一個),但我可能會堅持這個解決方案。只是一個問題 - 每個應用程序的25k下載(https://developers.google.com/maps/documentation/staticmaps/#Limits)是否適用於此?如果是這樣,他們如何檢查它?請求來自不同的設備,網址沒有API密鑰... – 2012-11-29 11:55:51

+0

你是對的,沒有API密鑰,他們無法強制執行每個應用25K限制。目前這個API可能沒有限制,如果請求來自不同的IPS。 – pcans 2012-12-02 12:49:22

-6

首先,您將在可繪製文件夾中顯示的地圖圖像用作該圖像視圖的背景。

+0

不相關的問題 – 2017-03-25 04:10:55

20
public static Bitmap getGoogleMapThumbnail(double lati, double longi){ 
     String URL = "http://maps.google.com/maps/api/staticmap?center=" +lati + "," + longi + "&zoom=15&size=200x200&sensor=false"; 
     Bitmap bmp = null; 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpGet request = new HttpGet(URL); 

     InputStream in = null; 
     try { 
      in = httpclient.execute(request).getEntity().getContent(); 
      bmp = BitmapFactory.decodeStream(in); 
      in.close(); 
     } catch (IllegalStateException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (ClientProtocolException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     return bmp; 
    } 
+4

此代碼已過時! – 2016-09-22 13:06:37

-1

正如@pcans所說,我真的很喜歡他的解決方案。您可以使用字符串作爲URL在ImageView中加載圖像。我建議圖像加載第三方庫: https://github.com/koush/ion

希望它可以幫助你:)

0

此外,另一種解決方案是畢加索庫:「強大的圖像下載和緩存庫爲Android

你給圖片網址,畢加索,然後它做一個GET請願書,並加載圖像。如果申請失敗,畢加索可以設置默認圖片。

您甚至可以在加載圖像時設置進度動畫。

這是一個很好的和乾淨的解決方案。

一個例子:

ImageView ivUrl = (ImageView) view.findViewById(R.id.iv_photo); 

Picasso.with(getContext()).cancelRequest(ivUrl); 

Picasso.with(getContext()) 
    .load(imageUrlString) 
    .error(R.drawable.ic_error) 
    .placeholder(R.drawable.progress_animation) 
    .into(ivUrl); 
4

Web視圖是我爲它的建議。

創建一個HTML文件中資源文件夾的html文件夾內static_map.html

其內容可能會像下面

<!doctype html> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>Untitled Document</title> 
<style> 
    html,body{ 
     padding:0; 
     margin:0; 
    } 
    .map{ 
     position: fixed; 
    top: 0; 
    right: 0; 
    bottom: 0; 
    left: 0; 
    width: 100%; 
    height: 100%; 
    } 
</style> 
</head> 

<body> 
<img class="map" src="REPLACE_HERE" > 
</body> 
</html> 

然後編程創建靜態地圖網址並更換REPLACE_HERE字符串與它。然後將其加載到Web視圖中。這將極大地減少我們的努力。

的代碼如下

try { 
    String url ="https://maps.googleapis.com/maps/api/staticmap?"; 
    url+="&zoom=13"; 
    url+="&size=600x300"; 
    url+="&maptype=roadmap"; 
    url+="&markers=color:green%7Clabel:G%7C"+latitude+", "+longitude; 
    url+="&key="+ YOUR_GOOGLE_API_KEY; 

    InputStream is = context.getAssets().open("html/static_map.html"); 
    int size = is.available(); 
    byte[] buffer = new byte[size]; 
    is.read(buffer); 
    is.close(); 
    String str = new String(buffer); 
    str = str.replace("REPLACE_HERE", url); 
    wv_map.getSettings().setJavaScriptEnabled(true); 
    wv_map.loadDataWithBaseURL("", str, "text/html", "UTF-8", ""); 
} catch (IOException e) { 

}