EATool-地理坐标系

    测量坐标转换在测绘领域是老生常谈,但不同情况下需求又稍有差别。本模块将给CAD平面图带上显式坐标系信息,以方便坐标、图形的直接转换与地理坐标查询,同时为CAD数据向GIS数据转换奠定坐标系方面的基础,适用于使用AutoCAD绘制测绘相关平面图的人群。


  • 定义图纸坐标系:设置当前CAD图形的参考投影坐标系。大地基准为参考椭球转换WGS84基准七参数,可从“七参数文件(*.7p)”读取(详见“七参数转换坐标”功能)。对于国外特殊坐标系可以通过读取ESRI *.prj文件直接导入坐标系。


图1图纸坐标系设置


  • 坐标反算:计算选择点对应的大地坐标,需定义图纸坐标系。


图2平面坐标反算


  • 坐标/图形换带、高程抵偿:单个或批量进行坐标换带、高程抵偿计算;当前CAD图形坐标换带、高程抵偿转换。高程抵偿采用椭球膨胀法,由于膨胀量计算方法有多种,计算结果并不唯一,所以本功能认为“膨胀椭球长半轴变化量”即为“投影高度”(TGO里好像是这个)(与某些程序里通过计算得出的“投影高程”的概念并不一样)。



3坐标换带、高程抵偿计算对话框


  • 七参数计算:


必须已知正确的输入坐标系与输出坐标系,如有带号应加入横坐标偏移500000之前;公共控制点个数一致、顺序一致(即一一对应,目前不能自动匹配)。



图4地方坐标与WGS84坐标计算七参数


  • 七参数坐标转换:

    坐标转换与参数计算在同一界面;可直接计算参数或输入参数或读取保存的七参数文件;根据七参数可将当前CAD平面图转换为目标坐标系。



图5地方坐标之间的转换


大地坐标数据格式为d.mmsssssss,文件(CSV)格式为:点名,经度/横坐标、纬度/纵坐标、椭球高。


  • 导入大地坐标:

    通过坐标正算转换大地坐标为同一椭球下平面投影坐标并绘制坐标点。需要先定义图纸坐标系,大地坐标格式为dd.mmssssLGO导出csv文件。

  • 导入WGS84坐标:

    通过七参数转换WGS84大地坐标为平面投影坐标并绘制坐标点。需要先定义图纸坐标系,包括地方椭球转换WGS84椭球七参数,大地坐标格式为dd.mmssss

  • 查询WGS84坐标:

    通过七参数转换计算选择点对应的WGS84大地坐标。需要先定义图纸坐标系,包括地方椭球转换WGS84椭球七参数,大地坐标格式为dd.mmssss

    鼠标点击查询点,命令行输出对应WGS84大地坐标。


图6查询WGS84坐标




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本软件是“测量计算工具包软件”的全面升级版。升级后的软件强化了坐标转换的功能,精简了其他不大使用的功能,软件名称更改为“坐标转换”,2013是全面升级后的第一个版本。 为适应国家测绘局地理信息办公室《2000国家大地坐标系推广使用技术指南》(以下简称《指南》)和《大地测量控制点坐标转换技术规程》(以下简称《规程》)的要求,坐标转换2013除保留原有的布尔沙模型和二维四参数模型外,增加了三维七参数、二维七参数、三维四参数和多项式拟合模型。另外,在转换参数的表达形式上也进行了调正,将“尺度比”改为“尺度变化”,与《指南》和《规程》保持一致。 升级后的坐标转换软件对程序界面和代码也进行了优化,参数的数值表示方式由固定宽度改为科学表示方式,使得其计算精度更高。 升级前的“椭球间的坐标转换”对应于升级后的“布尔沙模型”,升级前的“多公共点相似变换”对应于升级后的“二维四参数模型”。这两种模型升级前的转换参数完全可以用于升级后的软件,仅需将将“尺度比”换算为“尺度变化”即可,换算公式为:尺度变化D=尺度比K-1。 如果用户拥有转换区域的公共点(《指南》和《规程》叫“重合点”)的话,建议用升级后的软件重新计算转换参数。 必须说明的是,不同的转换模型,转换参数是不能互换的。 本软件的所有转换模型的计算公式都来源于《指南》和《规程》,仅对“多项式拟合”公式的表达形式进行了格式上的统一。 坐标转换2014版增加了GPS高程拟合和墨卡托投影正反算转换
以下是经纬高(WGS84)坐标系到ECEF坐标系转换代码: ```c #include <stdio.h> #include <math.h> #define PI 3.14159265358979323846 #define a 6378137.0 // 地球长半轴 #define b 6356752.314245 // 地球短半轴 #define e ((a*a-b*b)/(a*a)) // 地球椭球体第一偏心率 void WGS84_to_ECEF(double lat, double lon, double alt, double *x, double *y, double *z) { double N = a / sqrt(1 - e*sin(lat)*sin(lat)); *x = (N + alt) * cos(lat) * cos(lon); *y = (N + alt) * cos(lat) * sin(lon); *z = (N*(1-e) + alt) * sin(lat); } int main() { double lat = 39.909187; double lon = 116.397451; double alt = 50.0; double x, y, z; WGS84_to_ECEF(lat*PI/180.0, lon*PI/180.0, alt, &x, &y, &z); printf("ECEF坐标系下的坐标为:(%lf, %lf, %lf)\n", x, y, z); return 0; } ``` 以下是ECEF坐标系到ENU坐标系转换代码: ```c #include <stdio.h> #include <math.h> #define PI 3.14159265358979323846 void ECEF_to_ENU(double x, double y, double z, double lat0, double lon0, double alt0, double *e, double *n, double *u) { double slat0 = sin(lat0); double clat0 = cos(lat0); double slon0 = sin(lon0); double clon0 = cos(lon0); double dx = x - (clon0*x + slon0*y); double dy = y - (-slon0*x + clon0*y); double dz = z - alt0; *e = -slon0*dx + clon0*dy; *n = -slat0*clon0*dx - slat0*slon0*dy + clat0*dz; *u = clat0*clon0*dx + clat0*slon0*dy + slat0*dz; } int main() { double x = -2339108.3; double y = 5004615.5; double z = 3224800.9; double lat0 = 39.909187*PI/180.0; double lon0 = 116.397451*PI/180.0; double alt0 = 50.0; double e, n, u; ECEF_to_ENU(x, y, z, lat0, lon0, alt0, &e, &n, &u); printf("ENU坐标系下的坐标为:(%lf, %lf, %lf)\n", e, n, u); return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值