1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/YangsBryant-BryantTileMap

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

BryantTileMap

Android использует Google Maps, с использованием Gaode карт для загрузки слоев Google Tiles (Loading Google tile layer with Gaode maps).

Слои Google Tiles

Изображение

Пользовательский слой Tiles

Изображение

Как использовать

Интеграция с Gaode картами, использование ключевых методов для загрузки слоев Google Tiles

Преимущества BryantTileMap

  1. Решает проблему необходимости использования прокси для доступа к Google Maps в Android

  2. Можно использовать любые API Gaode

Недостатки BryantTileMap

  1. Карты Google имеют немного размытый вид

  2. На картах Google меньше меток интересных мест по сравнению с Gaode картами

  3. Загрузка слоев Google Tiles происходит медленнее, и можно заметить базовый слой

О сетевой безопасности конфигурации

Добавьте android:networkSecurityConfig="@xml/network_security_config" в узле <application> файла AndroidManifest.xml. Иначе невозможно получить доступ к слоям Google Tiles

Об MCodeCheck.apk

Вы можете получить SHA1 серийный номер, который часто используется многими платформами Ссылка на скачивание

Основной код

public class MainActivity extends AppCompatActivity {

    @BindView(R.id.mapView)
    MapView mapView;

    private AMap aMap;
    private MarkerOptions markerOptions;
    private String tileUrl = "http://mt2.google.cn/vt/";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
    }
}
``````java
mapView.onCreate(savedInstanceState); // Этот метод обязательно переопределяется
aMap = mapView.getMap();
aMap.getUiSettings().setZoomControlsEnabled(false); // Отображение кнопок масштабирования
aMap.getUiSettings().setRotateGesturesEnabled(false); // Возможность поворота жестами
aMap.moveCamera(CameraUpdateFactory.zoomTo(16)); // Уровень масштабирования
aMap.showMapText(false); // Не отображать названия мест, так как слои Google Tiles уже содержат метки
aMap.getUiSettings().setLogoBottomMargin(50); // Установка расстояния до нижнего края логотипа
aMap.getUiSettings().setLogoLeftMargin(50); // Установка расстояния до левого края логотипа
// Установка центра пользовательских плиток
double[] центральные_координаты = getCentralLatLng(new LatLng(**, **), new LatLng(**, **));
LatLng координаты = new LatLng(центральные_координаты[0], центральные_координаты[1]);
aMap.moveCamera(CameraUpdateFactory.newLatLng(координаты));

// Создание маркера
MarkerOptions markerOptions = new MarkerOptions();
View markerView = LayoutInflater.from(this).inflate(R.layout.marker_layout, mapView, false);
markerOptions.icon(BitmapDescriptorFactory.fromBitmap((Bitmap) markerView)); // Иконка маркера

// Добавление маркера
markerOptions.position(координаты);
aMap.addMarker(markerOptions);
aMap.animateCamera(CameraUpdateFactory.newLatLng(координаты), 500, null);
```// Обработка кликов на карте
aMap.setOnMapClickListener(latLng12 -> {
    // Очистка всех маркеров на карте (также очистит слои плиток)
    aMap.clear();
    // Восстановление слоев плиток
    aMap.addTileOverlay(tileOverlayOptions);
    aMap.addTileOverlay(tileOverlayOptions2);
    // Добавление нового маркера
    LatLng новая_координата = new LatLng(latLng12.latitude, latLng12.longitude);
    markerOptions.position(новая_координата);
    aMap.addMarker(markerOptions);
    aMap.animateCamera(CameraUpdateFactory.changeLatLng(новая_координата), 500, null);
});// Добавление Google плиток на карту
aMap.addTileOverlay(tileOverlayOptions);
// Добавление пользовательских плиток на карту
aMap.addTileOverlay(tileOverlayOptions2);```markdown
// Google тайловая карта
TileOverlayOptions tileOverlayOptions =
        new TileOverlayOptions().tileProvider(new UrlTileProvider(256, 256) {
            // x - горизонтальная координата, y - вертикальная координата, zoom - масштаб
            @Override
            public URL getTileUrl(int x, int y, int zoom) {
                try {
                    /* URL адрес Google тайлового слоя карты
                    параметр lyrs:
                    m - схема
                    t - топографическая карта
                    p - топографическая карта с метками
                    s - спутниковое изображение
                    y - спутниковое изображение с метками
                    h - слой меток (названия улиц, городов и т. д.) */
                    String url = tileUrl + "lyrs=y@167000000&hl=ru-RU&gl=ru&x=" + x + "&y=" + y + "&z=" + zoom +
                                 "&s=Galil.png";
                    return new URL(url);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return null;
            }
        });
### Самопроизвольные плиточные карты
```java
// Самопроизвольные плиточные карты
TileOverlayOptions tileOverlayOptions2 =
        new TileOverlayOptions().tileProvider(new UrlTileProvider(256, 256) {
            // x — горизонтальная координата, y — вертикальная координата, zoom — масштаб
            @Override
            public URL getTileUrl(int x, int y, int zoom) {
                try {
                    // Получение центральной точки самопроизвольной плиточной карты
                    double[] central = getCentralLatLng(new LatLng(**, **), new LatLng(**, **));
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return null;
            }
        });
```                    // Проверка, находится ли центральная точка в пределах экрана, чтобы получить id
                     if (getLat().contains(new LatLng(central[0], central[1]))) {
                         // Корректировочная формула Y-координаты
                         int y2 = (int) (Math.pow(2, zoom) - y - 1);
                         // Адрес самопроизвольной плиточной карты
                         String url = "https://******/"
                                 + "tile_id" + "/" + zoom + "/" + x + "/" + y2 + ".png";
                         return new URL(url);
                     }
                 } catch (Exception e) {
                     e.printStackTrace();
                 }
                 return null;
             }
         });### Определение центра плиточных карт
```java
public double[] getCentralLatLng(LatLng maxLatLng, LatLng minLatLng) {
    double latMax = maxLatLng.latitude - minLatLng.latitude;
    double lonMax = maxLatLng.longitude - minLatLng.longitude;
    return new double[]{minLatLng.latitude + latMax / 2, minLatLng.longitude + lonMax / 2};
}

Получение границ экрана

public LatLngBounds getScreenBounds() {
    VisibleRegion visibleRegion = aMap.getProjection().getVisibleRegion();
    return visibleRegion.latLngBounds;
}

## Блок кода для разметки
```xml
<androidx.constraintlayout.widget.ConstraintLayout 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:id="@+id/map"
    tools:context=".MainActivity"
    android:name="com.google.android.gms.maps.SupportMapFragment">

    <com.amap.api.maps.MapView
        android:id="@+id/mapView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>

Контактный QQ: 961606042


Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Андроид использует Google Карты, применяет карты Gaode для загрузки слоёв листов. Развернуть Свернуть
EPL-1.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/YangsBryant-BryantTileMap.git
git@api.gitlife.ru:oschina-mirror/YangsBryant-BryantTileMap.git
oschina-mirror
YangsBryant-BryantTileMap
YangsBryant-BryantTileMap
master