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中心文件交换.
1.9.0.0 | -utm2ll:修复输入参数为矩阵时的问题 |
|
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) |
|
1.3.0.0 | 小更新。 |
|
1.2.0.0 | 添加了一个ll2utm使用示例。 |
|
1.1.0.0 | 描述的微小更新。 |
惊人的功能,以及精确!完美满足我的需要!
你好
似乎在使用utm2ll的矩阵输入时仍然存在错误。
第158行中的Size函数使用了矩阵输入(X和Y)的1D向量形式,所以我不得不改变这部分。
谢谢你,弗朗索瓦。您的代码实际上帮助我将纬度和经度更改为UTM坐标!
我花了很长时间来解决这个问题,感谢您的代码,我得到了正确的结果!谢谢
你好
我目前正在尝试在赤道+/-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好吗?
你好,谢谢你的工作。
我尝试使用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
有什么主意吗?谢谢,
荣茂
嗨,非常感谢这些代码。仅供参考,当我将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坐标转换的矢量化版本可以帮助用户处理大型网格,如数字高程模型,其他功能失效或需要无限时间。