用matlab坐标转换(墨卡托/UTM)(自用)

自用,写的乱七八糟。

坐标转换主要参考文献

利用Matlab进行地理坐标和直角坐标相互转换
matlab经纬度坐标与高斯坐标的转换(proj4)-5
使用matlab绘制世界地图

椭圆墨卡托投影坐标转换流程图

模型定义mercator
变换对
PROJ.4地图库
projfwd正
projinv反
地理到地图坐标
mfwdtran正
minvtran反

两种坐标相互转化(代码)

模型定义

%%% 对投影方式进行定义
%Cylindrical-Mercator Cylindrical-mercator  墨卡托圆柱投影
mstruct=defaultm('mercator');
mstruct.geoid=[ 6378137,0.0818191908426215];
mstruct.origin=[33 131 0];%设置初始点
mstruct.origin=[0 0 0];%设置初始点
mstruct=defaultm(mstruct);

第一个变换对

[x,y] = projfwd(mstruct,lat,lon);
[lat,lon]=projinv(mstruct,x,y)

第二个变换对

[x,y] = mfwdtran(mstruct,lat,lon));
[lat,lon]=minvtran(mstruct,x,y)

算法示例

记得,计算直线距离用norm,不要用distacne,每次都在这个上面浪费是时间

clc;clear all
p1 = [32, 131];
p2 = [34, 131];
%%% 对投影方式进行定义
%Cylindrical-Mercator Cylindrical-mercator  墨卡托圆柱投影
mstruct=defaultm('mercator');
mstruct.geoid=[ 6378137,0.0818191908426215];
mstruct.origin=[0 0 0];
mstruct=defaultm(mstruct);
%%% 对地理坐标(lat,lon) 
[x1,y1] = projfwd(mstruct,p1(1),p1(2));
[x2,y2] = projfwd(mstruct,p2(1),p2(2));
norm([x1,y1]-[x2,y2])
distance(32, 131,34, 131,6371)
[latccc,lonccc]=projinv(mstruct,x2,y2)

UTM 坐标投影转换流程

找到坐标对应的区域
定义模型
定义椭圆率
坐标转换
figure; 
axesm utm
axesmui

在这里插入图片描述

算法示例 (横向墨卡托投影)

p1 = [32, 131];
p2 = [34, 131];
z1 = utmzone(p1); % degrees
[ellipsoid,names] = utmgeoid(z1);
utmstruct = defaultm('utm'); %定义模型,这个用utm模型
utmstruct.zone = z1; %查找某个区
utmstruct.geoid = ellipsoid;
utmstruct = defaultm(utmstruct) ;
[x1,y1] = mfwdtran(utmstruct,p1(1),p1(2));
[x2,y2] = mfwdtran(utmstruct,p2(1),p2(2));
distance(32,131,34,131,6371)
norm([x1,y1]-[x2,y2])
[lat,lon]=minvtran(utmstruct,x1,y2)

matlab绘制世界地图

使用matlab绘制世界地图
m_map及GSHHS精细岸线加载

旋转矩阵

旋转矩阵
旋转矩阵

[ x ′ y ′ ] = [ c o s ( θ ) − s i n ( θ ) s i n ( θ ) c o s ( θ ) ] ∗ [ x y ] (1) \left[\begin{matrix} x^{'}\\ y^{'} \end{matrix} \right] = \left[ \begin{matrix} cos(\theta) & -sin(\theta)\\ sin(\theta) & cos(\theta) \end{matrix} \right] \ast \left[\begin{matrix} x\\y \end{matrix}\right]\tag{1} [xy]=[cos(θ)sin(θ)sin(θ)cos(θ)][xy](1)

常用数学符号的 LaTeX 表示方法

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值