我们在开发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;

地图经纬度坐标与屏幕坐标的转换(android版)的更多相关文章

  1. 百度API从经纬度坐标到地址的转换服务

    /// <summary> /// 百度API从经纬度坐标到地址的转换服务 /// </summary> /// <param name="lng"& ...

  2. 【ArcGIS for Android】经纬度坐标、地图投影坐标、屏幕坐标互相转换

    SpatialReference mSR4326 = SpatialReference.create(4326); SpatialReference mSR3857 = SpatialReferenc ...

  3. 地图的平移、缩放的实现(android版)

    一.平移地图 移动地图的原理是利用手指在屏幕上拖动的距离,转换为在地图上距离,把地图坐标加上偏移的距离实现地图移动. 由于地图是绘制到Bitmap上的,所以地图移动和缩放的过程只要改变Bitmap的矩 ...

  4. baidu经纬度坐标与google经纬度坐标都转换

    baidu经纬度坐标与google经纬度坐标都是经过转换的.使用下面那个url可以将原始坐标或者谷歌的坐标转换成baidu的坐标http://api.map.baidu.com/ag/coord/co ...

  5. API地图坐标转化(批量转换坐标)

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  6. 批量调用百度地图API获取地址经纬度坐标

    1 申请密匙 注册百度地图API:http://lbsyun.baidu.com/index.php?title=webapi 点击左侧 “获取密匙” ,经过填写个人信息.邮箱注册等,成功之后在开放平 ...

  7. 使用ArcGIS实现WGS84经纬度坐标到北京54高斯投影坐标的转换

    [摘 要] 本文针对从事测绘工作者普遍遇到的坐标转换问题,简要介绍ArcGIS实现WGS84经纬度坐标到北京54高斯投影坐标转换原理和步骤. [关键词] ArcGIS 坐标转换 投影变换 1 坐标转换 ...

  8. 利用百度地图API,获取经纬度坐标

    利用百度地图API,获取经纬度坐标 代码很简单,但在网上没找到现成的获取地图经纬度的页面. 就是想,给当前页面传递一个经纬度,自动定位到此经纬度.然后可以重新选择,选择完返回经纬度. 效果如下: 源代 ...

  9. Android中由IP地址查询经纬度坐标的实例

    大家都知道,根据IP地址就可以知道它所在的具体位置,在Android中同样可以由IP地址得到它的位置,即具体的地理经纬度坐标. 本文就直接以代码的方式演示如何根据IP地址查询地理经纬度坐标位置,下面的 ...

随机推荐

  1. iOS-CocoaPods安装及使用

    1. 安装 Ruby 对于iOS开发者,CocoaPods是最方便的第三方管理工具了,但是怎么安装CocoaPods呢,安装CocoaPods之前,要确保mac已经安装上Ruby,但在安装Ruby时, ...

  2. 使用Properties类和ResourceBundle类读取properties文件

    一.介绍: 项目中经常把一些常用的用户名和密码都填写到一个对应的配置文件中,这样每次修改密码或者用户名的时候就可以直接修改这个配置文件了,不用动源码. 这里讲两种方式读取properties文件的方法 ...

  3. HDFS DATANODE 磁盘容量的最小值

    HDFS的DATANODE的剩余空间具体要到多大?关于这个问题,下面记录下对这个问题的调查 昨天,讨论群里面给出了一个异常: op@odbtest bin]$ hadoop fs -put ../tm ...

  4. vue制作小程序--mpvue

    mpvue是一个使用 Vue.js 开发小程序的前端框架 http://mpvue.com/ sass的使用 https://segmentfault.com/q/1010000014194954 n ...

  5. Redis笔记(七):Redis应用场景

    特性优势 1 支持持久化 Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用. 2 数据类型丰富 Redis不仅仅支持简单的key-value类型的数据,同时还 ...

  6. gcc 混合连接动态库和静态库

    当对动态库与静态库混合连接的时候,使用-static会导致所有的库都使用静态连接的方式.这时需要作用-Wl的方式 gcc test.cpp -L. -Wl,-Bstatic -ltestlib  -W ...

  7. [LeetCode]LinkedList Cycle

    题目说明 Given a linked list, determine if it has a cycle in it. Follow up: Can you solve it without usi ...

  8. 动态创建table表格页面出现undefined原因以及修改

    源代码: var html: if(lists) { html += '<a href="https://www.4001149114.com/NLJJ/member/sharecel ...

  9. Maven 添加 Tomcat 插件

    若想在 Maven 中使用 Tomcat 服务器,需要在 pom.xml 文件中的 <build></build> 标签中添加以下代码 <!-- Maven项目编译插件 ...

  10. jquery操作字符串常用方法总结及工作代码

    1.javascript数组用法 方法 描述 FF IE concat() 连接两个或更多的数组,并返回结果. 1 4 join() 把数组的所有元素放入一个字符串.元素通过指定的分隔符进行分隔. 1 ...