Как показать весь мир и наложить на него маркеры?

Фон

Я хочу показать популярную карту всего мира и нанести на нее маркеры.

Проблема

Я пытался использовать Карты Google для него, но кажется ( здесь) он не поддерживает масштабирование достаточно, чтобы показать весь мир.

Что я нашел

Глядя на Википедию ( здесь), центр земли находится на 30 ° 00 "N 31 ° 00'E, но это похоже на Египет, и оно не похоже на центр карты мира, даже на самой странице Википедии:

enter image description here

Я также нашел аналогичный вопрос здесь, поэтому я преобразовал его в код Android:

    MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.mapFragment);
    mapFragment.getMapAsync(new OnMapReadyCallback() {
        @Override
        public void onMapReady(final GoogleMap googleMap) {
            LatLngBounds allowedBounds = new LatLngBounds(
                    new LatLng(-85, 180),    // bottom right corner
                    new LatLng(85, -180)    // top left corner of map
            );
            double k = 5.0f;
            double n = allowedBounds.northeast.latitude - k;
            double e = allowedBounds.northeast.longitude - k;
            double s = allowedBounds.southwest.latitude + k;
            double w = allowedBounds.southwest.longitude + k;
            LatLng neNew = new LatLng(n, e);
            LatLng swNew = new LatLng(s, w);
            LatLngBounds boundsNew = new LatLngBounds(swNew, neNew);
            googleMap.setLatLngBoundsForCameraTarget(boundsNew);
        }
    });

Но он вообще не показывает весь мир:

введите описание изображения здесь

Я также попытался сыграть с увеличением (смотря здесь), но он никогда не уменьшался достаточно, чтобы показать столько, сколько континенты:

googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(30, 31), 1));

enter image description here

Я выбрал "1", потому что документы говорят, что "1" - это значение для "мира":

В следующем списке показан приблизительный уровень детализации, который вы можете ожидайте увидеть на каждом уровне масштабирования:

1: World

Вопрос

Как я могу показать весь мир на Картах Google?

Или, есть ли хорошая альтернатива просто показать карту мира (статическое изображение тоже хорошо) и уметь помещать на нее маркеры? Возможно, даже используя VectorDrawable?

Есть ли изображение, которое я могу показать, и как-то на нем накладывать метки?

Ответ 1

Его можно показать весь мир и поставить маркеры на него MapView (или MapFragment) Режим Lite:

... Если вам нужно показать весь мир в окне просмотра, лучше использовать Lite Mode.

Маркеры находятся в "частично" Поддерживаемые функции:

Вы можете добавить маркер и ответить на событие клика. Вы также можете добавить пользовательские значки маркеров. Невозможно сделать маркер перетаскиваемым. Маркеры на карте режима Lite являются плоскими, и их нельзя поворачивать.

Кроме того, вы можете использовать другие функции, такие как линии и рисование многоугольников, и т.д.

Итак, с MainActivity например:

public class MainActivity extends AppCompatActivity {

    private static final String MAP_VIEW_BUNDLE_KEY = "MapViewBundleKey";

    private MapView mMapView;
    private GoogleMap mGoogleMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Bundle mapViewBundle = null;
        if (savedInstanceState != null) {
            mapViewBundle = savedInstanceState.getBundle(MAP_VIEW_BUNDLE_KEY);
        }

        mMapView = (MapView) findViewById(R.id.mapview);
        mMapView.onCreate(mapViewBundle);

        mMapView.getMapAsync(new OnMapReadyCallback() {
            @Override
            public void onMapReady(GoogleMap googleMap) {
                mGoogleMap = googleMap;
                mGoogleMap.addMarker(new MarkerOptions()
                        .position(new LatLng(31.755983, 35.212879))
                        .title("Jerusalem"));
            }
        });
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);

        Bundle mapViewBundle = outState.getBundle(MAP_VIEW_BUNDLE_KEY);
        if (mapViewBundle == null) {
            mapViewBundle = new Bundle();
            outState.putBundle(MAP_VIEW_BUNDLE_KEY, mapViewBundle);
        }
    }
}

и activity_main.xml (также можно установить программный режим Lite для MapView через GoogleMapOptions.liteMode(true)):

<com.google.android.gms.maps.MapView android:id="@+id/mapview"
    xmlns:map="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    map:cameraZoom="1"
    map:mapType="normal"
    map:liteMode="true"
    />

у вас есть что-то вроде этого:

Google Maps Whole World

Ответ 2

Вы можете увидеть весь мир, используя Lite Mode в API Google Maps Android.

Вы можете добавлять на него маркеры так же, как и в режиме полной карты.

Ответ 3

Это возможное решение с использованием Google Static Maps API.

Запрос:

https://maps.googleapis.com/maps/api/staticmap?size=510x480&center=0,0&zoom=1&scale=2&key=YOUR_KEY

Просто поиграйте с параметрами размера, чтобы проверить желаемый вид.

Static Map API