我们在开发GIS系统的时候,首先要解决的就是地图的可视化问题,这个问题的关键就在于如何把地图的坐标转换成屏幕坐标,然后才到渲染着色、标注等。以下以wgs84经纬度坐标为基准,介绍一下地图经纬度坐标与屏幕坐标转换的问题。
一、比例尺
首先地图本身就是表达地球上各种事物的空间分布、联系及时间中的发展变化状态绘制的图形。如何把地球上大量的空间信息显示在有限的地图上,这就是涉及到比例尺的问题。比例尺=图上距离与实际距离的比。
比例尺有resolution和scale两个概念
Resolution是指屏幕上一个像素和其所显示的地图在实际地面上的距离之比。
Scale是图上线段的长度和该段距离在地面的实际长度之比
一般来说计算机是使用Resolution这个概念,而人们生活中就是使用scale这个概念,因为Resolution直接就使用屏幕像素来计算,所以性能上比scale要快。
//计算resolution double Resolution=map.width / screen.width //计算scale float dpi=this.view.getResources().getDisplayMetrics().xdpi; double PIXEL_SIZE=(1/dpi)*0.0254; PIXEL_SIZE=(1/dpi)*0.0254 double Scale=Resolution* MetersPerUnit /PIXEL_SIZE //0.0254为1英寸=0.0254米
二、地图坐标和屏幕坐标的转换
如图所示,由于地球是球形的,同样两条经线,纬度越高,经线之间的直线距离越短,但经度还是保持不变的,所以在北半球或南半球上任意两条经线和纬线之间的区域,都是类似梯形的,由于这个梯形的左上角和左下角,右上角和右下角的经度都是相同的,所以我们可以把这个梯形看成是长方形,经过投影转换,在屏幕上看到的地图就是经过拉伸长方形了。
由于越向北,两条经线之间的实际距离越短,所以,要投影成长方形,就必须确定一个经度的长度:MetersPerUnit=111319.4908
//地图坐标转屏幕坐标: screenPt.x=screen.center.x+ ((mapPt.x-mapExtent.center.x)/resolution+0.5); screenPt.y=screen.center.y- (mapPt.y-mapExtent.center.y)/resolution+0.5); //屏幕坐标转地图坐标: mapPt.x=mapExtent.center.x+(screenPt.x-screen.center.x)*resolution; mapPt.y=mapExtent.center.y-(screenPt.x-screen.center.x)*resolution;
时间: 2024-10-29 12:50:05