我正在尝试获取一组多边形的面积。我可以使用st_area
和st_geomFromText
,但在尝试使用st_transform
时,我得到了undefined function
错误。我需要从4326转换到3857(或任何可以给予我英亩的东西)。
geomesa版本:我有2.4.2,但现在我有3.4。
错误:
AnalysisException: Undefined function: st_transform. This function is neither a built-in/temporary function, nor a persistent function that is qualified as spark_catalog.default.st_transform.; line 4 pos 2
代码:
%scala
import spark.implicits._
import org.apache.spark.sql.functions._
import org.locationtech.geomesa.spark.jts._
spark.withJTS
import org.locationtech.geomesa.spark.geotools._
%sql
select
a.user_id
, Sum(st_area(st_geomFromText(a.polygon))) --this works
, Sum(st_transform(st_geomFromText(a.polygon), 'EPSG:4326','EPSG:3857')) --this does not work
from core_table a
group by a.user_id
我尝试过改变fromCRS
和toCRS
字符串。我尝试过使用小写、不同的数字、带/不带引号和字母等。我尝试过将st_transform()封装在SUM()中,但没有任何效果。
我也尝试过类似于this的方法。
1条答案
按热度按时间gcuhipw91#
几何函数在不同的包中,因为它们需要GeoTools而不仅仅是JTS。我相信您需要调用
org.apache.spark.sql.SQLTypes#init
或等效的org.locationtech.geomesa.spark.GeometricDistanceFunctions#registerFunctions
才能使它们可用。