Как отображать статическую карту google на андроиде?

Я хочу отобразить статическую карту google на изображении. Что-то похожее на "Whatsapp" показывая, пока разделяет местоположение. Как я могу это сделать?

Ответ 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

Во-первых, вы берете образ своей карты, который вы показываете в папке с возможностью рисования после этого, в качестве фона этого образа.