我们在开发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. easyui toopTip,鼠标划过悬浮,显示一个小提示框的方法

    easyui toopTip,鼠标划过悬浮,显示一个小提示框的方法 /*easyui,鼠标划过悬浮,显示一个小提示框的方法*/ function toopTip(idOrClass,showText) ...

  2. java语言编程入门

    1 概述 1.1 计算机 计算机包括硬件和软件两部分.硬件包括计算机中可以看得见的物理部分.软件提供看不见的指令.这些指令控制硬件并且使得硬件完成特定的任务. 1.2 程序设计 定义:创建(或开发软件 ...

  3. Scrapy源码注解--CookiesMiddleware

    class CookiesMiddleware(object): """ 中间件在Scrapy启动时实例化.其中jars属性是一个默认值为CookieJar对象的dict ...

  4. ubuntu编译安装ruby1.9.3,从p551降级到p484

    在升级redmine的时候遇到ruby版本适配的问题.找了些资料. ruby安装包除了官方网站,可以参考 http://ftp.ruby-lang.org/pub/ruby/1.9/ 需要从1.9.3 ...

  5. phpstorm扩展

    1, CodeGlance 代码地图插件 &lt;img src="https://pic1.zhimg.com/50/v2-721f173bafcb9b60853819c32780 ...

  6. sql 保留两位小数

    select convert(decimal(18,2),1800.2669)

  7. rails 5.2 启动警告 warning: previous definition of VERSION was here和bootsnap

    bootsnap依赖问题 You should add gem 'bootsnap' to your gemfile to install it or remove the line require ...

  8. centos7下搭建JAVA项目运行环境。 JAVA+MYSQL+TOMCAT+NGINX

    环境: centos 7 64位 一.配置mysql 5.71.下载mysql源安装包wget http://dev.mysql.com/get/mysql57-community-release-e ...

  9. 面试题20:搜索二叉树可能有两个元素发生了交换,如何恢复BST?

    Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing ...

  10. NFS文件共享服务搭建

    一.概述 NFS工作流程 1.由程序在NFS客户端发起存取文件的请求,客户端本地的RPC(rpcbind)服务会通过网络向NFS服务端的RPC的111端口发出文件存取功能的请求. 2.NFS服务端的R ...