0

我正在尝试在 kepler.gl 中映射附加的 h3index 数据集。我使用以下 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 中进行映射时,我什么也看不到。

4

2 回答 2

0

H3 索引是一个 64 位整数,通常编码为十六进制字符串。看起来您的 Scala 代码正在以 base-10 格式输出整数,这在内存中可能很好(对于支持 64 位整数的语言),但通常不用作数据交换格式。特别是 Javascript,不支持 64 位整数,需要十六进制字符串。

所以 CLI 输出882bac516bfffff, 是正确的。您可能需要更新 Scala 代码以十六进制打印其输出。

至于开普勒,你用的是H3层吗?您需要在数据中指定 H3 层和包含 H3 索引的列。

于 2020-01-22T19:38:45.780 回答
0

我在下面分享我的最终代码,以防有人发现它有用。这是在数据块笔记本中执行的。

%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)))
)
于 2020-01-23T02:24:04.830 回答