Индекс H3 (разрешение 8) и проблема отображения kepler.gl - PullRequest
0 голосов
/ 22 января 2020

Я пытаюсь отобразить прикрепленный набор данных h3index в kepler.gl. Я использовал следующую функцию scala для генерации их с индексом разрешения 8.

val geoToH3 = udf{ (latitude: Double, longitude: Double, resolution: Int) => 
  H3.instance.geoToH3(latitude, longitude, resolution) 

https://drive.google.com/file/d/1Wffsi1GoRGox8r3s_HYWRqFTtKKP_s8B/view?usp=sharing

Когда я использую h3 в терминал для тех же значений широты и долготы, он дает мне другой hex_index:

Пример:

./bin/geoToH3 --resolution 8 --latitude 46.81355 --longitude -71.22968

, который возвращает 882bac516bfffff

Оба из этих hex_indexes правильно?

Кроме того, когда я пытаюсь отобразить в kepler.gl, я ничего не вижу.

Ответы [ 2 ]

0 голосов
/ 23 января 2020

Я поделюсь своим окончательным кодом ниже на случай, если кто-то может найти его полезным. Это было выполнено в записной книжке.

%scala
import org.locationtech.jts.geom._
import org.locationtech.geomesa.spark.jts._

import org.apache.spark.sql.types._
import org.apache.spark.sql.functions._
import spark.implicits._

spark.withJTS

object H3 extends Serializable {   val instance = H3Core.newInstance()
}

val geoToH3 = udf{ (latitude: Double, longitude: Double, resolution:
Int) =>    H3.instance.geoToH3(latitude, longitude, resolution)  }

val res = 8 //the resolution of the H3 index, 0.461354684 km edge length
val dfH3 = df_scala.withColumn(
  "hex_id",
  hex(geoToH3(col("latitude"), col("longitude"), lit(res)))
)
0 голосов
/ 22 января 2020

Индекс H3 - это 64-разрядное целое число, которое обычно кодируется как шестнадцатеричная строка. Похоже, ваш код Scala выводит целое число в формате base-10, что может быть хорошо в памяти (для языков, которые поддерживают 64-разрядные целые числа), но обычно не используется в качестве формата обмена данными. В частности, Javascript не может поддерживать 64-разрядные целые числа и требует шестнадцатеричной строки.

Таким образом, вывод CLI, 882bac516bfffff, является правильным. Возможно, вам придется обновить код Scala, чтобы распечатать его вывод в шестнадцатеричном формате.

Что касается Кеплера, вы используете слой H3? Вам необходимо указать слой H3 и столбец в ваших данных, который содержит индексы H3.

...