我正在Google App Engine上开发一个应用程序,需要查找包装盒中的所有点。
基本的SQL搜索将是:
minlatitude<纬度和最大经度>纬度和minlongitude<经度和最大长度>经度
但是,这个请求在Google App Engine上既低效又被禁止(你不能在两个不同的领域使用不等式)。
因此,我使用分层顺序http://en.wikipedia.org/wiki/Geohash编码纬度/经度。
但是使用Geohash有一些问题: 是的,它会找到包装盒中的所有积分,但它也会找到开箱即用的点。
我们举一个例子:
具有(1,1)的左下角的盒子 - > geohash1 = s00twy01mtw0
和右上角(10,10) - > geohash2 = s1z0gs3y0zh7
将接受点P,如(2,11) - > geohashP = s0rg6k1fye42
因为geohash1< geohashP< geohash2
即使P不在盒子里。
有关获得包装盒中所有点的有效方法的任何想法(只有它们)? 我现在正在考虑在请求之后对其他错误点进行后处理。
答案 0 :(得分:3)
不要重新发明轮子!空间查询是一个棘手的问题,但已经被几个第三方库解决了。其中最好的可能是geomodel library。
答案 1 :(得分:2)
答案 2 :(得分:0)
您可以理论上使用Cantor pairing function将矩形的四个坐标映射到单个值,但我不确定是否(很容易)可以对这些值执行包含测试。