WGS84坐标系图层转火星坐标系(是整个图层转哟,不是转单点坐标)

开篇唠叨(着急的略过)

大天朝“火星坐标系”小科普:是一种国家保密插件,对真实坐标系统进行人为的加偏处理,将真实的坐标加密成虚假的坐标,加密后的坐标被称为火星坐标系统。所有的电子地图所有的导航设备,都需要加入国家保密插件。

  • 地图公司测绘地图,测绘完成后,送到国家测绘局,将真实坐标的电子地图,加密成“火星坐标”,这样的地图才是可以出版和发布的,然后才可以让GPS公司处理。
  • 所有的GPS公司,需要用到导航电子地图的,统统需要在软件中加入国家保密算法,将COM口读出来的真实的坐标信号,加密转换成国家要求的保密的坐标,这样,GPS导航仪和导航电子地图就可以完全匹配,GPS也就可以正常工作。

本帖概述:当前网上关于“百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换“的技术贴基本都是限于单点经纬度坐标的转换,还未延伸到地图图层转换的层面,这让需要图层转坐标的盆友看完依然意犹未尽、不知所措,下面依据本人WGS84坐标系图层转火星坐标系的经验,为现有的技术贴写个续。时间原因,当前只提供一个半自动的转换思路,有时间的宝宝自己完善下代码实现全自动化吧······

————————————— 我是分割—————————————

转换思路

转换的基本思路是在控制点坐标值转换的基础上,通过Arcgis的配准功能实现图层坐标转换;转换过程大致分为控制点选取、控制点坐标值转换、配准Links File构建及配准执行四个步骤。

转换过程

1.控制点选取

控制点选取采用Arcgis的Create Fishnet功能,在图层范围内均匀采点。(具体使用方法可参考http://blog.sina.com.cn/s/blog_764bc78a0100qbsh.html)

我的待转换图层(WGS84坐标)与生成的渔网和控制点,控制点疏密小伙伴们根据需要自己调整吧。

对控制点图层增加经纬度属性字段,并进行Calculate Geometry计算获得控制点的经纬度,并导出生成控制点文件(.txt)。

  

2.控制点坐标值转换

控制点坐标值转换请参考之前的技术贴https://github.com/wandergis/coordtransform,把上面获取到的WGS84坐标系控制点的经纬度坐标值转换为火星坐标系的经纬度坐标值。

3.配准Links File构建

构建如下图所示的配准控制点关联文件(.txt),每一行依次为一个控制点转换前(WGS84)的经度、纬度和转换后(火星系)的经度、纬度。

PS福利来袭:控制点比较多的时候一个一个转坐标值并构建关联文件太麻烦,本人对之前技术贴中的坐标值转换程序进行了拓展优化,可自动读取控制点文件,批量处理并生成关联文件。(拿走不谢:http://pan.baidu.com/s/1boMeIPh)

双击运行test中的index.html,输入控制点文件路径名称及关联文件保存路径名称,创建即可。

4. 配准执行

Arcgis中打开待校正图层,并使处于编辑状态,右键工具栏勾选打开spatial adjustment,设置配准数据全选。

打开关联文件links---open links file,选择上一步生成的link.txt,可看到关联控制点被加载到地图中。

运行adjust,执行配准,完成图层坐标转换。(注意:配准会直接修改原数据,最好备份原数据)。

5.最后,看看转换效果

底图是高德(火星坐标系)的道路图,蓝色为转换前的WGS84坐标路网图层,红色为转换后的火星坐标系路网图层。红色和底图基本重叠,蓝色偏差较远。

说明:由于国测局的加偏并不是线性的加偏,所以各地的偏移情况都会有所不同,但是我们无法得到国测局的加密参数,只能各地都使用公布的相同转换参数,故准换后会存在一定的偏差,但偏差不大,精度要求不高不影响使用。

最后的最后,别问我Arcgis中怎样加载高德地图,问他······

http://www.cnblogs.com/pengchen/p/4771288.html

时间: 2024-10-14 10:30:33

WGS84坐标系图层转火星坐标系(是整个图层转哟,不是转单点坐标)的相关文章

Objective-C上地球坐标系到火星坐标系转换算法

Objective-C上地球坐标系到火星坐标系转换算法 http://blog.csdn.net/zhaoxy_thu/article/details/17033347

iOS7上地球坐标系到火星坐标系转换算法

2013年01月31日 ? 综合 ? 共 2595字 ? 字号 小 中 大 ? 评论关闭 今天在一个项目中需要用到地球坐标系到火星坐标系的转换,找了好几种实现方法,但都无法在iOS6以上的系统中使用,最后找到了一个C#的转换算法,对照着写了一个iOS版的,在这里分享给大家. 地球坐标和火星坐标的具体含义可以见:http://blog.sina.com.cn/s/blog_7581a4c301015230.html 目前网上的方法主要有以下几种: 1.在iOS4.3之前的系统上通过私有类MKLoc

[C#]火星坐标系 (GCJ-02)与百度坐标系 (BD-09) 转换帮助类

关键代码: using System; using YanZhiwei.DotNet2.Utilities.Models; namespace YanZhiwei.DotNet2.Utilities.Common { /// <summary> /// 火星坐标系 (GCJ-02)与百度坐标系 (BD-09) 转换帮助类 /// </summary> public class BDGCJLatLonHelper { /* *参考: *BD09坐标系:即百度坐标系,GCJ02坐标系经

子坐标系C在父坐标系W中的旋转问题

关键词:空间旋转.旋转轴.刚体旋转 用途:相机位姿估计.无人机位姿估计 文章类型:概念.公式总结(本文不带推倒过程,若想了解公式是如何推出来的请自习搜索文献),C++函数展示 @Author:V_Shawn @Date:2016-11-04 @Lab: [email protected] 本文接上一篇<空间点绕轴旋转公式&程序(C++)>,继续讨论空间内的旋转问题,可能会用到上一篇中定义的函数. 问题四:空间内的坐标系旋转(相机坐标系在世界坐标系中的旋转) 好了,现在问题越来越复杂了,

iOS Core Animation Advanced Techniques(一):图层树、寄宿图以及图层几何学

(一)图层的树状结构 巨妖有图层,洋葱也有图层,你有吗?我们都有图层 -- 史莱克 Core Animation其实是一个令人误解的命名.你可能认为它只是用来做动画的,但实际上它是从一个叫做Layer Kit这么一个不怎么和动画有关的名字演变而来,所以做动画这只是Core Animation特性的冰山一角. Core Animation是一个复合引擎,它的职责就是尽可能快地组合屏幕上不同的可视内容,这个内容是被分解成独立的图层,存储在一个叫做图层树的体系之中.于是这个树形成了UIKit以及在iO

CALayer 知识:创建带阴影效果的圆角图片图层和创建自定义绘画内容图层

效果如下: KMLayerDelegate.h 1 #import <UIKit/UIKit.h> 2 3 @interface KMLayerDelegate : NSObject 4 5 @end KMLayerDelegate.m 1 #import "KMLayerDelegate.h" 2 3 @implementation KMLayerDelegate 4 5 /** 6 * 根据角度,获取对应的弧度 7 * 8 * @param degree 角度 9 *

百度地图坐标系和火星坐标系之间的互相转换

// 百度转火星 -(CLLocationCoordinate2D)hhTrans_GCGPS:(CLLocationCoordinate2D)baiduGps { CLLocationCoordinate2D googleGps; double bd_x=baiduGps.longitude - 0.0065; double bd_y=baiduGps.latitude - 0.006; double z = sqrt(bd_x * bd_x + bd_y * bd_y) - 0.00002

火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换算法

package com.hjb.util; import java.util.HashMap; import java.util.Map; public class BaiduMapstoAutoNaviMapUtils { static double pi = 3.14159265358979324; static double a = 6378245.0; static double ee = 0.00669342162296594323; static double x_pi = 3.14

百度坐标系和火星坐标系互转

1.火星坐标转为百度坐标: function bd_encrypt(gg_lon, gg_lat){ var X_PI = Math.PI * 3000.0 / 180.0; var x = gg_lon, y = gg_lat; var z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * X_PI); var theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * X_PI); var bd_