Первоначально, после предполагаемого использования , как видно из их README, оно должно работать.
Gradle:
compile("com.uber:h3:3.4.1")
для Android Studio:
implementation "com.uber:h3:3.4.1"
Кодировать местоположение в адрес шестиугольника:
H3Core h3 = H3Core.newInstance();
lat = 37.775938728915946;
lng = -122.41795063018799;
res = 9;
String hexAddr = h3.geoToH3Address(lat, lng, res);
Декодировать адрес шестиугольника в координаты:
List<GeoCoord> geoCoords = h3.h3ToGeoBoundary(hexAddr);
Если вышеописанное не работает, см. Ниже.
Известная проблема: Android, библиотека не может использоваться
UnsatisfiedLinkError
- С этим можно столкнуться, когда соответствующая собственная библиотека не скопирована / обнаружена в проекте. После обходного пути NickRadu должно заработать.
Ниже приведено пошаговое руководство.
- Добавьте папку JNI в папку приложения вашего проекта и переименуйте ее в
jniLibs
(app/src/main/jniLibs
) (по какой-то причине ее имя jni
не работает только для меня).
- Получите H3 JAR (убедитесь, что вы используете ту же версию) и извлеките содержимое JAR.
- Скопируйте папки с префиксом
android-
и вставьте их в папку jniLibs
(из шага 1).
- Переименуйте скопированные папки, удалите префикс
android-
.
- Добавьте
splits { abi { enable false } }
в файл build.gradle вашего приложения (в пределах android
).
Готово. В общем, библиотека должна теперь работать как положено.
Если во время установки приложения вы встретите INSTALL_FAILED_NO_MATCHING_ABIS
,
затем, в зависимости от вашего test устройства, создайте копию папки (вместе с ее содержимым) и переименуйте ее при необходимости.
Например, на устройстве, работающем на arm64-v8a, я просто сделал копию папки arm64
и переименовал ее в arm64-v8a
.
Примечание. Лучше всего сначала протестировать приложение на нескольких типах архитектуры ЦП, чтобы увидеть его поведение.
Чтобы быстро увидеть архитектуру процессора устройства, вы можете установить Информация об оборудовании Droid или выполнить быстрый тестовый код самостоятельно.
Вот тестовый блок, который я использовал, и соответствующие ему журналы результатов:
private fun testH3() {
val h3 = H3Core.newSystemInstance()
val lat = 37.775938728915946
val lng = -122.41795063018799
val resolution = 8
val hexAddr = h3.geoToH3Address(lat, lng, resolution)
val hex = h3.stringToH3(hexAddr)
val kRingsResult = h3.kRings(hexAddr, 1)
Log.d("H3Test", "geoToH3Address: $hexAddr")
Log.d("H3Test", "stringToH3: $hex")
Log.d("H3Test", "kRings: $kRingsResult")
}
Результат:
D/H3Test: geoToH3Address: 8828308281fffff
D/H3Test: stringToH3: 613196570331971583
D/H3Test: kRings: [[8828308281fffff], [8828308281fffff, 882830828dfffff, 8828308285fffff, 8828308287fffff, 8828308283fffff, 882830828bfffff, 8828308289fffff]]