地图经纬度坐标与屏幕坐标的转换(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;
时间: 2024-10-29 12:50:05

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

经纬度坐标与地图容器像素坐标相互转换

<!doctype html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="initial-scale=1.0, user-scalable=no, wi

iOS-地图真实坐标表示形式之间转换(double型,int型 互转)

在开发中可能会遇到这种需求,前端获取的地理坐标并不能在后台以double的形式表示,需要将其转化为其他样式比如:XX度XX分XX秒 的形式表示 进而转化为秒的形式即整形的形式 封装了两个类可直接实现地图经纬度坐标真实和整形表示方法的转换方式: /** 如何将度(DDD):: 108.90593度换算成度分秒(DMS)东经E 108度54分22.2秒?转换方法是将108.90593整数位不变取108(度),用0.90593*60=54.3558,取整数位54(分),0.3558*60=21.348

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

[摘 要] 本文针对从事测绘工作者普遍遇到的坐标转换问题,简要介绍ArcGIS实现WGS84经纬度坐标到北京54高斯投影坐标转换原理和步骤. [关键词] ArcGIS 坐标转换 投影变换 1 坐标转换简介 坐标系统之间的坐标转换既包括不同的参心坐标之间的转换,或者不同的地心坐标系之间的转换,也包括参心坐标系与地心坐标系之间的转换以及相同坐标系的 直角坐标与大地坐标之间的坐标转换,还有大地坐标与高斯平面坐标之间的转换.在两个空间角直坐标系中,假设其分别为O--XYZ和O--XYZ,如果两个 坐标系

百度地图墨卡托坐标转高德经纬度坐标(偏移小)

基本上是网上常见的方法进行坐标系的转换,但是误差很大.发现之所以误差大是在于百度的墨卡托坐标转百度的经纬度时误差太大,后面找到一个方法,误差较小,基本吻合. 参考:http://www.site-digger.com/tools/mct2latlng.html 这里的转换是直接调用百度地图SDK中的API,通过对其中JavaScript源代码的执行跟踪,提取出其中的墨卡托坐标转百度经纬度坐标的代码如下: Java版本: @Data public static class Point { priv

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

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

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

```html 批量转换坐标(据说有50次/秒的限制哦) 谷歌地图 鼠标点击的谷歌坐标是: 百度地图 鼠标点击的百度坐标是:() ``` ```javascript // (function(){ function loadscript(xyUrl, callback){ var head = document.getElementsByTagName('head')[0]; var script = document.createElement('script'); script.type =

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

大家都知道,根据IP地址就可以知道它所在的具体位置,在Android中同样可以由IP地址得到它的位置,即具体的地理经纬度坐标. 本文就直接以代码的方式演示如何根据IP地址查询地理经纬度坐标位置,下面的例子中演示的就是由58.192.32.1这个IP地址查询到其所在的经纬度坐标为(118.777802,32.061699). Java代码 package eoe.demo; import com.mapdigit.gis.DigitalMap; import com.mapdigit.gis.Ma

百度地图多边形画区域、获取节点经纬度坐标、判断某一点是否在此区域内

创建可绘画map: 1 <!DOCTYPE html> 2 3 <html> 4 <head> 5 <meta charset="UTF-8"> 6 <meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1, user-scalable=no"> 7 <meta name=&

由经纬度坐标得到腾讯地图的瓦片/切片行列号

参考:https://blog.csdn.net/mygisforum/article/details/22997879 https://blog.csdn.net/u013929284/article/details/53614281 https://blog.csdn.net/shaxiaozilove/article/details/54908569 项目需要根据数据的瓦片行列号建立文件目录,而已知的位置信息是经纬度,下面是解决方法: 一.经纬度坐标 => 投影坐标:腾讯地图使用的是Web