Geocell& Google App Engine空间查询

时间:2013-02-28 08:14:59

标签: java google-app-engine geospatial

lat = json.getJsonArray("data").getJsonObject(i).getDouble("lat");
lon = json.getJsonArray("data").getJsonObject(i).getDouble("lon");
Point p = new Point(lat, lon);
List<String> cells = GeocellManager.generateGeoCell(p);

使用上面的代码,我可以获得如下的单元格。

[9,9f,9ff,9fff,9fffe,9fffe1,9fffe13,9fffe136,9fffe1364,9fffe1364f,9fffe1364fb,9fffe1364fb7,9fffe1364fb76]

在最后一个元素“9fffe1364fb76”中,该元素表示多大?

现在我会告诉你我所知道的事情。

地球的地球大小为510,072,000Km ^ 2.

,元素“9”表示510,070,000km ^ 2/16。

,元素“9f”表示(510,070,000km ^ 2)/(16 ^ 2)

.. 最后一个元素“9fffe1364fb76”表示(510,070,000km ^ 2)/(16 ^ 13)。

这就是我对geocell的了解。这是对的吗?

否则,请告诉我真相...... zzZ

1 个答案:

答案 0 :(得分:2)

这取决于。 Geocells将[-90,90] x [-180,180]纬度/经度空间分成几部分。长度为1的土工格室串将该区域划分为16个部分,并将这两个维度中的每一个划分为4个部分。每个连续的字符再次将每个维度除以4。使用长度为13(最长的一个)的字符串,每个维度已被划分13次,因子为4,或4 ^ 13 = 67108864.因此[-90,90]纬度区间分为180/67108864 = 2.68220901 E-6度,[-180,180]经度间隔间隔分为360/67108864 = 5.36441802 E-6度。

距离的大小取决于你在地球上的位置,因为相同的度数会转换为不同纬度的不同纵向距离。在赤道上,两个方向上的一度等于111.319 km,因此赤道上最高分辨率的土工格室为0.597m×0.2985m,相当于大约0.18平方公尺的表面积。

在杆上,纵向长度缩小到零。在此之间,在60度的纬度,土工格室为方形,尺寸为0.2985m×0.2985m,表面积为0.089平方公尺。