Я хочу отобразить статическую карту google на изображении. Что-то похожее на "Whatsapp" показывая, пока разделяет местоположение. Как я могу это сделать?
Как отображать статическую карту google на андроиде?
Ответ 1
Google предлагает API статической карты бесплатно.
Вы можете загрузить динамически сконфигурированное растровое изображение из Интернета, сохранить его в файловой системе или в памяти, а затем получить из него чертеж, чтобы установить его в ImageView.
Вам нужно сгенерировать URL из ваших координат, чтобы загрузить данные из Интернета, используя этот URL. Пример для растрового изображения 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 уже есть некоторый ответ о том, как загрузить изображение из Интернета, чтобы отобразить его в виде изображения: ссылка
Вы можете найти здесь документацию по Google Static Maps API.
Ответ 2
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;
}
Ответ 3
Вы также можете отобразить статическое изображение изначально с SDK (это было добавлено в декабре 2014 года): https://developers.google.com/maps/documentation/android/lite
Это приведет к MapView.
Ответ 4
Веб-представление - это мое предложение.
Создайте html файл static_map.html внутри 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>
Затем программным образом создайте URL статической карты и замените строку REPLACE_HERE. Затем загрузите его на веб-просмотр. Это значительно сократит наши усилия.
Код выглядит следующим образом
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) {
}
Ответ 5
Кроме того, другим решением является библиотека Picasso: "Мощная библиотека загрузки и кеширования изображений для Android"
Вы даете графический url для Picasso, а затем он делает запрос GET и загружает изображение. Если петиция терпит неудачу, Picasso может установить изображение по умолчанию.
Вы даже можете установить анимацию прогресса во время загрузки изображения.
Это хорошее и чистое решение.
Пример:
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);
Ответ 6
String url = "https://maps.googleapis.com/maps/api/staticmap?" +
"center=40.714%2c%20-73.998" +
"&zoom=12&size=400x400" +
"&key=YOUR_API_KEY_GOES_HERE;
Picasso.get()
.load(url)
.into(imageView, new Callback() {
@Override
public void onSuccess() {
}
@Override
public void onError(Exception e) {
Toast.makeText(context, "Error to load Maps: " + e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
Ответ 7
Как указано @pcans, мне очень нравится его решение. Вы можете использовать строку в качестве URL для загрузки изображения в ImageView. Я предлагаю стороннюю библиотеку для загрузки изображений: https://github.com/koush/ion
Надеюсь, что это может вам помочь:)
Ответ 8
Во-первых, вы берете образ своей карты, который вы показываете в папке с возможностью рисования после этого, в качестве фона этого образа.