图像缩略图

LL2UTM和UTM2LL

版本1.9.0.0(7.09 KB)由 弗朗索瓦·博杜克尔
纬度/经度与UTM坐标的精确和矢量化转换。
4.8
16级

53下载

更新2019年5月29日

查看许可证

UTM2LL将通用横向墨卡托(UTM)东/北坐标转换为纬度/经度。
LL2UTM将纬度/经度坐标转换为UTM。
这两个函数都使用精确公式(毫米精度)、可能的用户定义基准(默认为WGS84),并且都是矢量化的(代码中没有循环)。这意味着巨大的点矩阵,就像整个DEM网格一样,可以非常快地转换。
示例(需要readhgt.m作者的函数):
X=readhgt(36:38,12:15,'merge','crop',[36.5,38.5,12.2,16],'plot');
[lon,lat]=网格网格(X.lon,X.lat);
[x,y,zone]=ll2utm(lat,lon);%完成任务!
z=双(X.z);z(z==-32768 | z<0)=NaN;
图形
pcolor(x,y,z);遮阳板;等等
等高线(x,y,z,[0,0],'w')
拖延;轴相等;轴紧
xlabel(“东(m)”;伊拉贝尔(‘北(米)’)
标题(sprintf(“西西里-UTM区域%d WGS84”,区域))
以lat/lon(2400x4500网格)加载西西里岛的SRTM全分辨率DEM,将其转换为UTM,并使用pcolor和等高线绘制结果。要制作常规UTM网格,可以使用griddata函数插值x和y。

有关语法和帮助,请参阅“doc ll2utm”和“doc utm2ll”。

引用为

弗朗索瓦·博杜克尔(2020年)。LL2UTM和UTM2LL(//www.tianjin-qmedu.com/matlabcentral/fileexchange/45699-ll2utm-and-utm2ll),MATLAB中心文件交换.

评论和评级(26)

乔恩·阿德森

惊人的功能,以及精确!完美满足我的需要!

达达格

你好

似乎在使用utm2ll的矩阵输入时仍然存在错误。

第158行中的Size函数使用了矩阵输入(X和Y)的1D向量形式,所以我不得不改变这部分。

乔纳斯·鲍尔

陈氏威士忌

谢谢你,弗朗索瓦。您的代码实际上帮助我将纬度和经度更改为UTM坐标!
我花了很长时间来解决这个问题,感谢您的代码,我得到了正确的结果!谢谢

亚历山大·鲍里索夫

比利·B

你好
我目前正在尝试在赤道+/-2度纬度范围内的位置运行模型。有没有办法避免将数据分为15N和15S utm区域?

弗朗索瓦·博杜克尔

亲爱的艾伦:,
当输入大于90的纬度绝对值(可能是在输入参数中切换了纬度和经度)时,会发生此错误。您建议的修复可以避免错误,但结果肯定是错误的。。。正确的语法是ll2utm(纬度、经度)。
弗朗索瓦。

艾伦·查夫

当我运行这个函数时,它抛出了

“使用复数时出错
实输入A必须是数字、实输入和全输入。
ll2utm中的错误(第160行)
z=配合物(atan(sinh(L)./cos(l1-L0)),对数(tan(pi/4+asin)(sin(l1))和-
L0)。/cosh(L))/2);"

问题是复数中的两个量本身是复数(尽管虚部为0)。将此行替换为

z=复合物(实(atan(sinh(L)./cos(l1-L0))),实(对数(tan(pi/4+asin(sin(l1-L0)./cosh(L)));

解决了这个问题

胡安赫诺

非常感谢你的工作。非常感谢!

纳塔莉亚·阿莫林

罗西塔·波尔曼苏里

hox I可以使用matlab将网格正弦转换为经纬度

内迪姆·格汗·艾丁

同样,对于那些可能会觉得有趣的人,尽管我不在GIS领域,但我调整了utm2ll的第115行:
L0=(6*abs(f)-183)/D0;

L0=(6*f-183)/D0;
它工作得很好。下面是一个例子:
utm2ll(463385.253095579.99,28)%是的,我正在使用utm28
ans=
27.9848503065749 -15.3723407898456

通过以下方式确认结果:
http://www.engineeringtoolbox.com/utm-latitude-longitude-d_1370.html

迪维恩杜·纳拉扬

你好,弗朗索瓦

使用脚本绘制以纬度和经度记录的行人路径。用于转换为局部笛卡尔坐标。工作得很好。谢谢!

乔布

谢谢你。这将非常有用。ll2utm工作正常,但utm2ll适用于标量和向量,但在我使用的版本9.0.0.341360(R2016a)中无法用于矩阵

[lat,lon]=utm2ll(xx,yy,12);
| |和&&运算符的操作数必须可转换为逻辑标量值。

utm2ll中的错误(第135行)
而任何(isnan(p0)| abs(p-p0)>eps)和&n

请加上GDA94好吗?

fabriziorosi92

你好,谢谢你的工作。

我尝试使用ll2utm和火星的纬度、经度。我已经看到有可能将“基准”创建为2元素向量。

对于火星来说,这个向量是[3396.9,0.00589]。

使用这个向量,我有一个错误:“使用复数的错误
实输入A必须是数字、实输入和全输入。
ll2utm中的错误(第160行)
z=络合物(atan(sinh(L)./cos(l1-L0)),对数(tan(pi/4+asin(sin(l1-L0)./cosh(L))/2));"

我怎样才能把这个代码用于火星lat,lon?

谢谢。

斯科特·厄克哈特

您好,谢谢您的工作,

为了在南半球实现这一点:

[lat,lon]=utm2ll(e,n,z);
[e,n,z]=ll2utm(lat,lon,z);

我修改了ll2utm,使其区域输入(z)为正值。(147号线附近)

%UTM区域自动设置
如果是空的(区域)
F0=圆形((l1*D0+183)/6);
其他的
F0=防抱死制动系统(区域);%MB添加abs
终止

而不是

如果是空的(区域)
F0=圆形((l1*D0+183)/6);
其他的
F0=区域;%MB添加abs
终止

谢谢你再唱一次。。。
马克

荣茂

嗨,弗雷德里克,
我尝试使用ll2utm.m,发现即使使用不同的数据,输出也不会改变。见下文:

[a,b,c]=ll2utm(31.810108412085388,-1.039358695918168e+02)

a=6.007219987931314e+05
b=3.519881013316354e+06
c=13

[a,b,c]=ll2utm(31.810108412085388,-1.039358695918168e+02,'nad27')

a=6.007241362545381e+05
b=3.519694086015768e+06
c=13

[a,b,c]=ll2utm(31.810108412085388,-1.039358695918168e+02,'clk66')
a=6.007241362545381e+05
b=3.519694086015768e+06
c=13

有什么主意吗?谢谢,

荣茂

Seb Biass

嗨,非常感谢这些代码。仅供参考,当我将utm2ll与东距和北距矩阵一起使用时,我会得到以下错误-无论我是将分区作为标量、向量还是矩阵输入:

________________________________________
| |和&&运算符的操作数必须可转换为逻辑标量值。

utm2ll中的错误(第135行)
而任何(isnan(p0)| abs(p-p0)>eps)和&n

________________________________________
| |和&&运算符的操作数必须可转换为逻辑标量值。

utm2ll中的错误(第80行)
如果~isnumeric(f)| | any(f~=round(f))| |(~isscalar(f)&&any(size(f)~=size(x)))

顺致敬意,
s

关于utm2ll.m:
当X和Y可以是标量、向量或矩阵时,为什么区域必须是标量?

你好在ll2utm.m的矢量化版本中,我没有得到南半球坐标的负区域。第172行的代码应该是:
f=F0.*符号(横向);
而不是
f=F0;

顺致敬意,
弗雷德里克

对不起,我的评论与ll2utm.m(不是utm2ll.m)有关。

弗雷德·马辛

马修

你好,Francois,非常感谢这些功能,非常有用且非常快速。我想知道是否有办法强制UTM区域。例如,我正在使用许多UTM 22 N中的数据集,我希望能够做到:
[x,y]=ll2utm(lat,lon,22);

因为否则我的x和y可能是不同的区域。谢谢!
马修

弗朗索瓦·博杜克尔

lat/lon vs UTM坐标转换的矢量化版本可以帮助用户处理大型网格,如数字高程模型,其他功能失效或需要无限时间。

更新

1.9.0.0

-utm2ll:修复输入参数为矩阵时的问题
-ll2utm:修复区域为向量/矩阵但LAT为标量时的问题
-改进输入参数检查

1.8.0.1

重新包装

1.8.0.0

ll2utm:在输入参数中添加纬度值检查

1.7.0.0

包装问题。

1.6.0.0

在Frederic Christen的评论之后(谢谢!),区域输入参数可以是ll2utm和utm2ll中的标量、向量或矩阵。修正了南半球负区多输出的错误。

1.5.0.0

LL2UTM:增加了强制UTM区域的可能性(感谢Mathieu的建议)。

1.4.0.0

-添加单个输出参数(ll2utm和utm2ll)
-添加单个输入参数(ll2utm)

1.3.0.0

小更新。

1.2.0.0

添加了一个ll2utm使用示例。

1.1.0.0

描述的微小更新。

MATLAB版本兼容性
使用R2013b创建
与任何版本兼容
平台兼容性
窗户 马科斯 Linux
致谢

灵感来自:utm2deg