我先介绍一下这个问题:我开发在那里我已经显示在地图领域中的应用,并覆盖标记和线条。 然而,在BlacBerry OS 5.0,只有MapField
在API中没有提供手段覆盖的东西,只能显示位置地图。 它还提供了方法,以屏幕坐标(像素)转换到/从WGS84坐标。 这些方法可能是计算昂贵的。
因此,要画我自己的项目,我需要扩展该类并覆盖其paint()方法。 延伸类还将举行locations.This的集合是怎样的覆盖方法会是什么样子(我将在这里使用Java):
public void paint (Graphics g) {
super.paint(g); //draws the map
//TODO
//Draw placemarks. The placemarks are basically holder objects
//(for latitude and longitude) stored in a collection in this class.
}
然而,在屏幕上画这些东西,我们首先要转换的地标位置(纬度,经度)到屏幕坐标(X,Y像素)。 这不能提前完成,因为地图是不是静态的,所以它能够滚动,并在放大或缩小。 这就是为什么在每个油漆循环,我们应该画至少可见的对象。 这就是说,我的问题是:
给定一个矩形的周边,其中角部是地理位置(当前显示的地图的一部分的变换的四个角落),是否有一个快速的方法来循环在集合中的每个地标和确定它们是否是可见的或不?
我不需要这个测试是100%准确的,如果屏幕之外的几个位置都画我不介意。 但随着标集合可以包含许多元素(<100),和paint方法将在每个屏幕重绘调用,试图画集合中的每一个位置,不检查,如果它是可见或不可见可能会影响性能,当引入滞后用户与地图交互。
在尝试提供一个天真的回答,请注意,这不是一个简单的几何问题:我们正在与地理坐标的工作,而不是与整屏幕坐标。 世界不会在经度+180结束,或纬度+90。 这个功能应该在极而在ecuator工作,所以我需要它也工作的时候,我们有一个过渡线(从-180到+180,或从-90到+90,或两者线)与矩形相交。 由于逻辑可能会很复杂,我想知道是否有这个地方已经完成并经过测试,而不是实现我自己的一个现有的算法或开源库。
我也可以先转换成每个位置的集合中的屏幕坐标,然后很容易地检查对一个只有积极的屏幕坐标组成的矩形(开始从x = 0,Y = 0),但随着转型的功能可能是昂贵的,我想它优于标的一个不确定数变换中的每个刷新仅4点(可见地图拐角)。
任何其他办法或思路也将不胜感激。
提前致谢。