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

OSCHINA-MIRROR/talkwebyunchaung-osmdroid-ohos

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

OSMDroid-ohos

Введение

OSMDroid-ohos — это упрощённая версия Google-проекта с открытым исходным кодом OSMDroid, перенесённая на систему HarmonyOS. Она позволяет разрабатывать приложения для работы с картами на системе HarmonyOS.

В настоящее время в OSMDroid-ohos по умолчанию перенесена карта Baidu Tiles. Она предоставляет базовые функции отображения фрагментов карты, включая:

  • отображение фрагментов карты;
  • навигационные стрелки;
  • метки координат местоположения;
  • возможность перетаскивать карту одним пальцем;
  • увеличение масштаба двойным нажатием одним пальцем;
  • масштабирование двойным касанием;
  • поворот карты двойным касанием.

Отображение карты

Планирование маршрута

Использование MapView

Добавление XML-разметки:

    <DependentLayout
        ohos:id="$+id:osm_map_container"
        ohos:height="match_content"
        ohos:width="match_parent">

        <com.talkweb.osmharmony.views.MapView
            ohos:id="$+id:osm_map_view"
            ohos:height="match_parent"
            ohos:width="match_parent"
            ohos:horizontal_center="true"/>
        
        ·················

Добавление кода Java:

mMapContainerView = (DependentLayout) findComponentById(ResourceTable.Id_osm_map_container);
mapView = (MapView) findComponentById(ResourceTable.Id_osm_map_view);

или

mMapContainerView = (DependentLayout) findComponentById(ResourceTable.Id_osm_map_container);
DependentLayout.LayoutConfig layoutConfig = new DependentLayout.LayoutConfig();
layoutConfig.width = DependentLayout.LayoutConfig.MATCH_PARENT;
layoutConfig.height = DependentLayout.LayoutConfig.MATCH_CONTENT;

// Создание экземпляра MapView
mapView = new MapView(this);
mMapContainerView.addComponent(mapView, 0, layoutConfig);

Запрос соответствующих разрешений

Добавление разрешений в файл конфигурации config.json:

······ 

"module": {
    "reqPermissions": [
      {"name": "ohos.permission.LOCATION"},
      {"name": "ohos.permission.LOCATION_IN_BACKGROUND"},
      {"name": "ohos.permission.ACCELEROMETER"},
      {"name": "ohos.permission.GET_NETWORK_INFO"},
      {"name": "ohos.permission.SET_NETWORK_INFO"},
      {"name": "ohos.permission.INTERNET"},
      {"name": "ohos.permission.GYROSCOPE"},
      {"name": "ohos.permission.READ_USER_STORAGE"},
      {"name": "ohos.permission.WRITE_USER_STORAGE"}
    ],
    
······

Запрос динамических разрешений через Ability:

public class MainAbility extends Ability {

    private String[] requestPermissions = {
            SystemPermission.WRITE_USER_STORAGE, 
            SystemPermission.READ_USER_STORAGE, 
            SystemPermission.LOCATION
    };

    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setMainRoute(MainAbilitySlice.class.getName());
        PermissionsUtils.getInstance().requestPermissions(this, requestPermissions);
    }

    @Override
    public void onRequestPermissionsFromUserResult(int requestCode, String[] permissions, int[] grantResults) {
        PermissionsUtils.getInstance().onRequestPermissionsResult(requestCode, permissions, grantResults);
    }
}

Запуск мультитач-жестов

// Запуск мультитач-жестов для увеличения, уменьшения и поворота
MapView.setMultiTouchControls(true);

Установка центра карты

mMapController = mapView.getController();
// Установка центра карты в определённую точку
mMapController.setCenter(new GeoPoint(28.222567, 112.884651));

Настройка уровня масштабирования

mMapController = mapView.getController();
// Настройка начального уровня масштабирования
mMapController.setZoom(15.0);

Загрузка офлайн-карт

// Загрузка офлайн-карты
File file = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).getParentFile();
String strFilepath = file.getPath() + "/osmdroid/";

File[] files = new File(strFilepath).listFiles();
if (files != null && files.length > 0) {
    File exitFile = files[0];
    if (exitFile.exists()) {
        String filename = exitFile.getName();
        String extension = filename.substring(filename.lastIndexOf(".") + 1);
        if (ArchiveFileFactory.isFileExtensionRegistered(extension)) {
            IRegisterReceiver registerReceiver = new SimpleRegisterReceiver(this);
            File[] offlineFiles = new File[]{exitFile};
            OfflineTileProvider tileProvider = new OfflineTileProvider(registerReceiver, offlineFiles);
            mapView.setTileProvider(tileProvider);

            IArchiveFile[] archives = tileProvider.getArchives();
            if (archives.length > 0) {
                Set<String> tileSource = archives[0].getTileSources();
                if (!tileSource.isEmpty()) {
``` **Добавление наложений**

**Добавление компаса**  

```java
// Компас
InternalCompassOrientationProvider compassProvider = new InternalCompassOrientationProvider(this);
CompassOverlay mCompassOverlay = new CompassOverlay(this, compassProvider, mapView);
mCompassOverlay.enableCompass();
mapView.getOverlays().add(mCompasOverlay);

Добавление моего местоположения

private MapView mapView;
private MyLocationNewOverlay mLocationOverlay;

@Override
public void onStart(Intent intent) {
    super.onStart(intent);
    super.setUIContent(ResourceTable.Layout_ability_main);

    if (isGrantedLocationPermission()) {
        addMyLocationOverlayMark();
    } else {
        PermissionsUtils.getInstance().setRequestListener(permission -> {
            if (permission.equals(SystemPermission.LOCATION)) {
                addMyLocationOverlayMark();
            }
        });
    }
}

@Override
public void onActive() {
    super.onActive();
    mapView.onResume();
    if (mLocationOverlay != null) {
        mLocationOverlay.enableMyLocation();
    }
}

@Override
protected void onInactive() {
    super.onInactive();
    mapView.onPause();
    if (mLocationOverlay != null) {
        mLocationOverlay.disableMyLocation();
    }
}
    
private boolean isGrantedLocationPermission() {
    return IBundleManager.PERMISSION_GRANTED 
        == verifyCallingOrSelfPermission(SystemPermission.LOCATION);
}

private void addMyLocationOverlayMark() {
    // Добавляем текущую позицию устройства, сначала необходимо получить разрешение на местоположение устройства
    mLocationOverlay = new MyLocationNewOverlay(mapView);
    PixelMap personPixelMap = ResourceHelper.getPixmap(this, ResourceTable.Media_person);
    PixelMap directionPixelMap = ResourceHelper.getPixmap(this, ResourceTable.Media_loc);
    mLocationOverlay.setDirectionArrow(personPixelMap, directionPixelMap);
    mapView.getOverlays().add(mLocationOverlay);
}   

Добавление масштаба карты

// Масштаб карты
ScaleBarOverlay scaleBar = new ScaleBarOverlay(mapView);
scaleBar.setCentred(true);
scaleBar.setAlignBottom(true); // Отображение внизу
mapView.getOverlays().add(scaleBar);

Свободное вращение карты

// Свободное вращение карты
RotationGestureOverlay mRotationGestureOverlay = new RotationGestureOverlay(mapView);
mRotationGestureOverlay.setEnabled(true);
mapView.getOverlays().add(mRotationGestureOverlay);

Добавление точек маршрута

// Точки маршрута
Polyline polyline = new Polyline();

// Добавление ключевых точек на маршруте
for(int i = 0; i < size; i++) {
    polyline.addPoint(new GeoPoint(latitude, longitude));
}

// Установка заголовка информационного окна
polyline.setTitle("title");
// Установка содержимого информационного окна
polyline.setSubDescription(polyline.getDistance() + "");
// Ширина линии установлена в 50
polyline.getOutlinePaint().setStrokeWidth(20);
// Цвет линии установлен в синий
polyline.getOutlinePaint().setColor(Color.BLUE);
polyline.setInfoWindow(new BasicInfoWindow(ResourceTable.Layout_bonuspack_bubble, mapeView));
mapView.getOverlayManager().add(polyline);

Участие в разработке

  1. Fork этого репозитория.
  2. Создайте ветку Feat_xxx.
  3. Отправьте код.
  4. Создайте Pull Request.

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

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

Введение

Описание недоступно Расширить Свернуть
Apache-2.0
Отмена

Обновления

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

Участники

все

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

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