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;
  • 相关阅读:
    ASP.NET在禁用视图状态的情况下仍然使用ViewState对象【转】
    Atcoder Regular Contest 061 D Card Game for Three(组合数学)
    Solution 「CERC 2016」「洛谷 P3684」机棚障碍
    Solution 「CF 599E」Sandy and Nuts
    Solution 「洛谷 P6021」洪水
    Solution 「ARC 058C」「AT 1975」Iroha and Haiku
    Solution 「POI 2011」「洛谷 P3527」METMeteors
    Solution 「CF 1023F」Mobile Phone Network
    Solution 「SP 6779」GSS7
    Solution 「LOCAL」大括号树
  • 原文地址:https://www.cnblogs.com/gdguansun/p/4771277.html
Copyright © 2011-2022 走看看