zoukankan      html  css  js  c++  java
  • 地图经纬度坐标与屏幕坐标的转换(android版)

         我们在开发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;
  • 相关阅读:
    mysql教程(九) 索引详解
    mysql教程(八) 事务详解
    mysql教程(七) 约束详解
    mysql教程(七)创建表并添加约束
    mysql教程(六) 对字段的操作--添加、删除、修改
    mysql教程(五)limit的用法
    mysql教程(四)连接查询
    mysql教程(三)分组查询group by
    mysql教程(一)count函数与聚合函数
    mysql教程(二)数据库常用函数汇总
  • 原文地址:https://www.cnblogs.com/gdguansun/p/4771277.html
Copyright © 2011-2022 走看看