- 浏览: 1078184 次
- 性别:
- 来自: 苏州
文章分类
- 全部博客 (202)
- Android (31)
- Eclipse 使用 (14)
- 笔记 (5)
- 杂七杂八 (3)
- Java (18)
- 数据库 (6)
- web (21)
- JavaScript (24)
- Http (1)
- 杂谈 (1)
- JSP & Servlet (5)
- log4j (1)
- Linux (13)
- MS Office (3)
- postgresql (7)
- Tomcat (5)
- windows (4)
- tmp (1)
- Perl (1)
- Struts2 (17)
- JQuery (5)
- HTML5 (3)
- JSLint (2)
- iphone (1)
- ant (2)
- IE (1)
- tcp (1)
- JBoss (4)
- 正则表达式 (2)
- jmeter (1)
- CI (1)
- sonarqube (1)
- junit (1)
- chrome (1)
- mybatis (2)
- mysql (3)
- spring (2)
- maven (1)
最新评论
-
天使建站:
看这里:jquery里和操作数组的相关的:$.merg ...
JQuery 数组 -
lgywindows:
我照你的方法实现了在java中取国际化。谢谢提供!
spring mvc中,如何在 Java 代码里,获取 国际化 内容 -
ylhkaixin:
请教下大神,我转换报告的时候报错:report: [x ...
通过ant来批量执行jmeter脚本,并生成报告(附: 生成报告时报“Content is not allowed in prolog”这个错误的解决方案) -
lemon_yt:
正在找
spring mvc中,如何在 Java 代码里,获取 国际化 内容 -
Rainbow702:
alike222 写道Rainbow702 写道MyDream ...
通过ant来批量执行jmeter脚本,并生成报告(附: 生成报告时报“Content is not allowed in prolog”这个错误的解决方案)
今天又是神奇的发现:我希望在MapView的Overlay子类里画一个半径为 R米 的圆,于是用 metersToEquatorPixels 函数,将一个距离 R米 转换为一个以当前缩放等级下像素为单位的距离。调用的时候也没太注意,结果画出来的圆确实让我费解了阵子,仔细一看发现Equator这个单词,于是大概有点明白了。查了一下etersToEquatorPixels 函数的解释:该方法把以米为计量单位的距离(沿赤道)在当前缩放水平下转换到一个以像素(水平)为计量单位的距离。在默认的Mercator投影变换下,对于给定的距离,当远离赤道时,变换后确切的像素数量会增加。
SO,解决办法就是要将赤道,也就是零纬度的米对应的像素距离换算成我们需要的纬度的 米 对应的像素距离。我们可以写这么一个方法来实现:
public static int metersToRadius(float meters, MapView map, double latitude) { return (int) (map.getProjection().metersToEquatorPixels(meters) /(Math.cos(Math.toRadians(latitude)))); }
以上转自: http://cosyattic.com/archives/152
以下原创:
其实也可以这么理解,根据“GOOGLE MAP 源码”(关于源码,请参见:http://rainbow702.iteye.com/blog/1124280),我们可以看到该方法的实现:
public float metersToEquatorPixels(float meters) { return (float)meters*circumference /CIRCUMFERENCE_IN_METERS); }
而 circumference 与 CIRCUMFERENCE_IN_METERS 又分别是什么呢?如下:
private static final double CIRCUMFERENCE_IN_METERS = 40075160.0; private int tiles = 1 << zoomLevel; private double circumference = tileSize * tiles;
其中, zoomLevel 是你的 MapView 当前的缩放比例,tileSize 定义如下:
private MapSourceInfo mapSourceInfo = new CloudmadeSourceInfo("b06a3135a4eb5848a225483969f56967"); private int tileSize = mapSourceInfo.getTileSize(); CloudmadeSourceInfo 类的定义如下: class CloudmadeSourceInfo implements MapSourceInfo { private final String apiKey; private final int tileSize; private final int style; private final String attribution = "\u00a9 2009 CloudMade - Map data CC-BY-SA 2009\nOpenStreetMap.org contributors - Terms of Use"; CloudmadeSourceInfo(String apiKey) { this(apiKey, 256); } CloudmadeSourceInfo(String apiKey, int tileSize) { this(apiKey, tileSize, 1); } CloudmadeSourceInfo(String apiKey, int tileSize, int style) { this.apiKey = apiKey; this.tileSize = tileSize; this.style = style; } public int getMaxZoom() { return 18; } public String getName() { return "Open Street Maps Cloudmade renderer"; } public String getTileUri(int x, int y, int zoom) { return "http://b.tile.cloudmade.com/"+ apiKey +"/" + style + "/" + tileSize + "/" + zoom + "/" + x + "/" + y + ".png"; } public int getTileSize() { return tileSize; } public String getAttribution() { return attribution; } }
所以,假设赤道的半径为 R,我们所处的纬度为 α 度的平面(如上图红线所画的平面)的半径为 r,那么应该有以下等式成立(请再看一下metersToEquatorPixels的实现):
meters * (circumference /2πR) = P meters * (circumference / 2πr) = p
以上,P 是在赤道上 meters 米对应的像素的长度,而 p 是在 α 度纬度上 meters 米对应的像素的长度,进而可以得出以下等式:
2πR * P = 2πr * p
从而,最终得出以下等式:
2πR * P = 2πr * p p = (R / r) * P
那么, (R / r) 是什么呢,请看上图,只要是学习简单的立体几何的人应该都可以看来吧。对,它就等于 sec (α), 亦即原帖中所得的结果 1/cos (α)。
这样一来,大家都应该知道是怎么一回事了吧。希望对看到这篇博客的人有所帮助。
评论
发表评论
-
动态更新APK
2011-09-08 12:29 4356开发了一个APK后,往往后续需要进行更新升级。那么,当用户选择 ... -
Android数据保存之PreferenceActivity
2011-09-07 15:49 5748看到很多书中都没有对PreferenceActivit ... -
AsyncTask 的使用
2011-08-22 13:39 6030在开发Android应用时必须遵守单线程模型的原则: ... -
Android Service 之三(Bind Service,使用 AIDL)
2011-08-15 17:57 12138前面写了 Bind Service 的两种实现方式,接下来转一 ... -
Android Service 之三(Bind Service,使用 Messenger)
2011-08-15 17:26 10029上次讲了第一种 Bind Service 的实现方式,今天讲 ... -
Android NOtification 使用
2011-08-12 17:12 5004一、 Notification 简介 在 andro ... -
如何快速启动 Android 模拟器
2011-08-12 11:04 2496一直不知道在创建 AVD 时,那个 "enable ... -
Android 模拟器启动失败(SDL_app:emulator.exe )解决方法
2011-08-12 10:45 3533今天新建了一个AVD,给它划分了512MB的空间,然后启动之, ... -
Android Service 之三(Bind Service, 继承自 Binder 类)
2011-08-10 13:08 29968之前提及过,启动Service有两种方式:startServ ... -
android service 之二(IntentService)
2011-08-09 11:13 31684不管是何种Service,它默认都是在应用程序的主线程(亦即U ... -
android service 之一 (start service)
2011-08-08 15:45 13925我们有两种方式(start与bind)启动一个Service ... -
写Service Demo的时候遇到的一个问题小结一下
2011-08-08 14:29 8519我写了一个 Service 的Demo,但是将启动Servi ... -
百度Android工程师面试题
2011-07-28 09:49 2225百度Android工程师面试题 -
Android中UI主线程与子线程
2011-07-26 14:10 2100在一个Android 程序开始运行的时候,会单独启动一个Pro ... -
Android线程模型(Painless Threading)
2011-07-26 14:07 1560当第一次启动一个Android ... -
Android 之 传感器 应用
2011-07-26 10:42 5271传感器的使用 1.传感器类型: 方向、加速度(重力)、 ... -
Logcat出错:Could not create the view: For input string:
2011-07-22 13:39 2535使用eclipse开发android应用已经一年多了,但今 ... -
Goolge Map API 源码
2011-07-14 14:16 3859由于做GOOGLE MAP 的项目,所以就上网想找它的源码。结 ... -
申请 android google map API key(转)
2011-07-10 14:07 18431.首先要得到你的debug keystore位置: ... -
windows下如何批量下载android源码
2011-05-18 22:56 2599为了在windows下批量下载Android的源码,上网查 ...
相关推荐
谷歌地图经纬度到像素转换 ...谷歌地图经纬度到像素转换是通过上述公式实现的。这些公式将经纬度坐标转换为像素坐标,以便在地图上显示正确的位置信息。开发者可以根据需求选择合适的转换公式,以满足不同的应用场景。
经纬度到像素坐标的转换是一个复杂的过程,需要使用不同的方法和公式来进行转换。本文讨论了两种方法:公式转换法和坐标原点法,并且提供了距离计算法来计算两点之间的实际地理空间距离。这些方法和公式可以帮助我们...
四元数到欧几里得向量(笛卡尔坐标)的转换允许我们用简洁且无损的方式处理旋转。 4. **笛卡尔坐标转换**:笛卡尔坐标是最常见的3D空间表示方式,通过x、y、z三个轴定义点的位置。转换可能涉及到不同坐标系下的原点...
百度米制坐标转WGS84/火星经纬度坐标,BD02(火星坐标系)/WGS84百米制转换。
这个工具可能提供了便利的方法,使开发者能够轻松地将接收到的经纬度数据转换为在特定地图上显示的像素坐标,从而在前端实现动态的地理定位功能。 总的来说,经纬度转像素和Web前端定位插件是现代Web应用中实现地理...
2. **大地坐标与空间直角坐标转换**:在从WGS84坐标转换到任意坐标系的过程中,还需将WGS84空间直角坐标转换为大地坐标(纬度、经度、高程)。这一转换基于椭球体模型,通过迭代法计算得出。 #### 五、结论 在地质...
本文将深入探讨如何使用C#编程语言,结合Winform图形用户界面,实现不同坐标系之间的转换,包括从任意坐标系到54坐标系、80坐标系以及54坐标系到80坐标系的转换。 首先,我们要理解坐标转换的基本概念。坐标转换...
MySQL中的这两个函数——`84togcj2Lat`和`84togcj2Lon`,专门用于实现WGS84到GCJ02(也称为火星坐标系)的转换。 WGS84是全球最广泛使用的地理坐标系统,它是基于地球椭球体模型的,其中地球的平均半径约为6378.1...
本篇将详细介绍C#如何通过调用DLL进行这两种坐标之间的转换,以及涉及到的椭球体选择和投影方式。 首先,让我们理解一下平面坐标和经纬度。平面坐标系统,如笛卡尔坐标系,通常由X轴和Y轴构成,适用于二维平面上的...
C#中的坐标转换工具实现这一功能,通常会涉及到以下几个步骤: 1. **坐标系定义**:明确输入和输出坐标系的类型,如经纬度(WGS84)和CGCS2000。 2. **椭球参数**:每个大地坐标系都基于特定的地球椭球模型,如...
5. 米与其它长度单位转换:在GIS中,距离的测量通常使用米作为基本单位,但有时也需要转换为公里、英里、码等其他长度单位。这涉及到国际单位制和英美单位制的换算。 6. 坐标转换工具:这种工具能够处理多种坐标系...
“经纬度与XY转换.exe”是一个应用程序,能够实现地理坐标(经度/纬度)与平面坐标(X/Y)的相互转换。这在地图制作、GPS定位等场景中非常实用。 “cn.cod”可能是一个包含中国特定坐标转换规则或参数的代码文件。 ...
"大地坐标与经纬度坐标转换"涉及到的主要概念是地理坐标系统和投影坐标系统的差异以及它们之间的转换方法。 1. **地理坐标系统**:以地球为参照对象的坐标系统,通常使用经纬度来表示位置。经纬度坐标系是一种球面...
本话题主要探讨了如何使用C#编程语言实现坐标转换,特别是通过七参数法来处理不同的坐标系统之间的转换。以下是对这个主题的详细阐述: 一、坐标系统与坐标转换 1. 坐标系统:地球是一个不规则的三维形状,为了方便...
本话题主要涉及的是使用C++编程语言实现的大地坐标与经纬度之间的转换算法。大地坐标系通常指的是笛卡尔坐标系,而经纬度是地理坐标系中的表示方式,用于描述地球上的位置。下面将详细讨论这两种坐标系的原理以及...
MATLAB在地理信息系统(GIS)中的应用非常广泛,特别是在坐标转换方面,它能够提供强大的数学模型支持和算法实现。本文研究的是在政务地理信息工程建设中,如何将WGS-84坐标数据转化为地方坐标数据,这是一个常遇到...
本文将详细介绍一个使用Visual C++实现的大地坐标转经纬度坐标的源码。大地坐标系统(也称为高斯-克吕格坐标系统)是地理测绘中常用的一种坐标系,而经纬度坐标则是我们日常生活中更常见、更直观的定位方式。了解...
在ArcGIS JavaScript API中,地理坐标与屏幕坐标的相互转换是一项重要的功能,它允许开发者将地图上的地理位置(经纬度)转换为用户界面中的像素位置,反之亦然。这对于实现地图交互、绘制图形以及进行空间分析等...
这一过程通常涉及到定义特定的转换参数,例如七参数(也称为布尔莎模型),并使用相应的工具来执行转换。 #### 三、坐标转换的关键注意事项 在进行坐标转换之前,有几点需要注意: 1. **坐标格式**:WGS84的经纬度...
- **类设计**:在C#中,可以创建一个类来封装坐标转换方法,包括`WgsToBd`(WGS到百度),`BdToWgs`(百度到WGS),`WgsToGcj`(WGS到火星)和`GcjToWgs`(火星到WGS)等。 - **数学计算**:转换过程中会用到三角...