Подтвердить что ты не робот

Как Pokèmon Go использует пользовательскую карту Google с помощью API карт Google?

Я не могу найти нигде в документе API Google, что его карта может быть настроена (я знаю, что ее можно настроить только в Интернете), но она может видеть в приложении Pokèmon Go, что она использует Google API для отображения пользовательской карты.

Ссылка для Pokèmon Go использует карту google: https://www.reddit.com/r/pokemongo/comments/4s71t1/suggestion_download_city_map_as_a_way_to_decrease/

Любой, кто может понять этот подход?

Пользовательская карта я означает карту ниже с зеленым цветом и синим небом: введите описание изображения здесь

4b9b3361

Ответ 1

Я не знаю, как это делает Pokémon GO, но вы можете получить действительно красивый эффект с некоторыми трюками. Я использую изображение неба, и я покрываю изображение неба и карту с видом градиента (для имитации горизонта) и карты с полупрозрачным зеленым видом.

activity_maps.xml

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="170dp">

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scaleType="centerCrop"
            android:src="@drawable/sky"/>

        <View
            android:layout_width="match_parent"
            android:layout_height="20dp"
            android:layout_alignParentBottom="true"
            android:background="@drawable/gradientsky"/>
    </RelativeLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <fragment
            android:id="@+id/map"
            android:name="com.google.android.gms.maps.SupportMapFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            tools:context="mypackage.MapsActivity"/>

        <View
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#2200ff00"/>

        <View
            android:layout_width="match_parent"
            android:layout_height="20dp"
            android:background="@drawable/gradientmap"/>

    </RelativeLayout>

</LinearLayout>

gradientsky.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">
    <gradient
        android:angle="90"
        android:startColor="#ffffff"
        android:endColor="#00ffffff" />
</shape>

gradientmap.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">
    <gradient
        android:angle="270"
        android:startColor="#ffffff"
        android:endColor="#00ffffff" />
</shape>

MapsActivity.java (тривиально, но я добавляю его так, что пример завершен)

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_maps);
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap map) {
        map.getUiSettings().setCompassEnabled(false);
        map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
        CameraPosition cameraPosition = new CameraPosition.Builder()
                .target(new LatLng(39.87266,-4.028275))
                .zoom(18)
                .tilt(67.5f)
                .bearing(314)
                .build();
        map.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
    }
}

Результат выглядит следующим образом:

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

Другим подходом может быть использование TileOverlay для отображения пользовательской карты. Вы можете найти дополнительную информацию о Tile Overlays здесь.

Чтобы улучшить пример, вы можете добавить некоторый эффект параллакса в небо, чтобы он двигался, когда карта вращается.

Ответ 2

Wikipedia arcticle создателю Pokèmon Go:

Niantic, Inc. - компания по разработке программного обеспечения, наиболее известная для разработка мобильных игр с расширенной реальностью Ingress и Pokémon Go. Он был сформирован основателем Keyhole, Inc. Джоном Ханке в 2010 году как Niantic Лаборатории, внутренний запуск в Google.

Как вы можете видеть, Niantic был внутренним запуском в Google. Хотя обе компании пошли своим путем, Google все еще инвестирует в Niantic. Поэтому я думаю, что у Niantic есть некоторые возможности, которые недоступны для нас. Как вы сказали, я не нашел пути в документах Google Maps для Android.

Я не совсем уверен, что это правда, это просто предположение.