自用,写的乱七八糟。
坐标转换主要参考文献
利用Matlab进行地理坐标和直角坐标相互转换
matlab经纬度坐标与高斯坐标的转换(proj4)-5
使用matlab绘制世界地图
椭圆墨卡托投影坐标转换流程图
两种坐标相互转化(代码)
模型定义
%%% 对投影方式进行定义
%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} [x′y′]=[cos(θ)sin(θ)−sin(θ)cos(θ)]∗[xy](1)