带lat / lon的JTS

时间:2014-03-03 17:01:52

标签: latitude-longitude spatial-index jts

我有一些空间数据,其所有坐标都是纬度/经度对(小数精度约为10位),它作为WGS84数据存储在数据库中。一些数据表示为多边形,即结果存在一些较小的多边形,这些小多边形的边界被存储。然后我有一些点来构建一个linesegments(每个段只有2个点),我后来用它来与多边形进行交叉测试。

我正在使用SpatialIndex来改进我的查询,因此我将所有多边形的包络插入树中(使用QuadTree和STRtree进行测试)。然后,我将两个点连接到一个linesegment并且我使用它的信封来查询树可能的交叉点。问题是我得到了几乎所有的多边形,结果显然是错误的。为了让你对我的数据的实际比例有所了解,我有大约100个多边形覆盖整个北方美国,每一行都覆盖了一个多边形的一小部分。理想情况下,我预计结果不会超过2个多边形。

我正在使用JTS进行此计算,我知道它并不适合球形数据,所以您能否建议我使用另一个库/工具来实现所需的行为或可能的解决方法(例如,在使用之前进行投影) JTS)?

1 个答案:

答案 0 :(得分:0)

如果你只有北美洲,只需将地球旋转90度,这样阿拉斯加就不再在远东地区了。 (有趣的事实:阿拉斯加既是美国最北部,西部和东部的州)那么你的矩形应该没事。

使用球形数据时,有许多非平凡的案例。根据数据的定义方式,多边形边框实际上可能是弯曲的线条,而不是直线。考虑一下Google Ingress的截图:https://lh4.ggpht.com/S_9jrMqf08JfIbr7DgUDH96rvXMK4wOGtaSKYPGCruXv2HE4oeRuEaQIDIywMgH4198=h900

我在某处读到了"雾"的不匹配纹理和左侧场中可见的绿线是由于两个绘图函数使用不同的近似值。一个是直线,而另一个是地球的曲率。如果你有一个大字段(多边形!),则错误会变得更糟。

"交叉口"不幸的是,当你的数据由球体表面上的非直线组成时,这将成为一个棘手的术语;和"笔直#34;地球表面上的线通常会在latlon坐标系中产生一个arctan型曲线。

预测:这些可以提供帮助,但主要是在您的数据是本地数据时。 UTM预测相当不错,但您需要至少9个UTM区域来覆盖北美而不需要阿拉斯加。只要您的数据位于一个 UTM区域内,将数据投影到此区域然后使用2D欧几里德空间就可以正常工作。但如果它比这更大,你可能需要缝合不同的投影,这也是非常混乱。