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;
  • 相关阅读:
    5285: [Hnoi2018]寻宝游戏
    CF 1117 E. Decypher the String
    4515: [Sdoi2016]游戏
    CF 1051 G. Distinctification
    4820: [Sdoi2017]硬币游戏
    HNOI2019游记
    最近公共祖先(LCT)
    [WC2006]水管局长(LCT)
    P4178 Tree(点分治)
    二维凸包
  • 原文地址:https://www.cnblogs.com/gdguansun/p/4771277.html
Copyright © 2011-2022 走看看