假设我的当前点是lat = 50.000和long = 50.000并且我想在这些位置显示一些公交车站但我的限制应该取决于缩放级别。
到目前为止,为了达到这个目的,我找到了一个方法:如果一个可以采取左上角和右下角的拉特长;我会在这些地点之间找到站点。
你知道我怎么能对这种情况采取这些观点或任何不同的想法?
提前致谢..
答案 0 :(得分:3)
您可以使用
轻松获得左上角和右下角的纬度/经度坐标GeoPoint tlGpt; // Top left
GeoPoint brGpt; // Bottom right
tlGpt = mapView.getProjection().fromPixels(0, 0);
brGpt = mapView.getProjection().fromPixels(mapView.getWidth(), mapView.getHeight());
在任何缩放级别,您实际上 看 地图上的公交车站,那么左上方的经度可以被认为与左下方经度相同,类似左下方长约为=右下方长。因此,您可以将边界框视为矩形,而不是等腰梯形(美国英语中的梯形)
答案 1 :(得分:1)
如果您只是想要一个粗略的测量来获取合理的物体样本,那么纬度/长度“距离”就足够了。只需确保将纬度范围除以纬度的余弦,即可获得经度范围(即∆long = ∆lat/cos(lat)
)。这是为了在接近极点时补偿经度线的收缩。你使用Δlat作为基础,因为纬度线在地球上的任何地方都有相同的距离。
为了更准确的测量,有一些复杂的函数可以让你计算纬度/长度对的大圆距离,但从概念上来说,将纬度/长度对转换成3-D坐标要简单得多,并且使用简单的毕达哥拉斯距离近似于大圆距离。您可以使用2*r*acos(d/(2*r))
(如果我的白板几何形状对我很好),其中r是地球的名义半径,以获得精确的大圆。但是如果你想要的只是获得一个范围内的物体,你可以反转公式以获得相当于大圆限制的毕达哥拉斯 - 距离。这也可以用于导出3-D边界框以加速搜索。如果您的数据库支持R树,那么你在笑! SQLite支持R * Trees,但它们在默认构建中被禁用,因此我不知道它们是否在Android上可用(似乎it isn't)。