mat*_*fee 18 r utm latitude-longitude coordinate-transformation
我正在编写一个程序,它需要一些纬度/经度,并且我将它们内部转换为UTM,以便以米为单位进行一些计算.
纬度/长度点的范围非常小 - 约200米x 200米.它们几乎总是可以依赖于单个UTM区域(除非你不幸并且跨越区域的边界).
但是,纬度/长度所在的区域不受限制.有一天,这个项目可能会针对澳大利亚的人们运行(哦,甚至一个州还有多少个区域,以及这已经导致我多少痛苦......),以及墨西哥人民的另一天.
我的问题是 - 有没有办法确定特定长/纬度所在的区域,以便它可以被送入转换库(我目前使用proj4和R包rgdal).
我的语言是R,但答案不一定是 - 也许只是一个简单的计算,或者我可以将系统调用嵌入到projexectuable中.
干杯.
Jos*_*ien 39
编辑:对于适用于地球上所有非极性区域的(非R)代码,请参见此处或此处.
除非您处理来自几个特殊区域(斯瓦尔巴特群岛和挪威部分地区)的数据,否则这是一个简单的计算,您可以在R中自己完成.这是维基百科对经度与UTM区号的关系的描述:
UTM系统将地球表面在80°S和84°N纬度之间划分为60个区域,每个区域的宽度为6°.1区覆盖经度180°至174°W; 区域编号向东增加到区域60,覆盖经度174到180东.
因此,假设在您的数据中,Prime Meridian以西的经度被编码为从-180到0度的运行,这里是上面的R代码版本:
long2UTM <- function(long) {
(floor((long + 180)/6) %% 60) + 1
}
# Trying it out for San Francisco, clearly in UTM Zone 10
# in the figure in the Wikipedia article linked above
SFlong <- -122.4192
long2UTM(SFlong)
# [1] 10
Run Code Online (Sandbox Code Playgroud)
这个表达式显然可以简化一点,但我认为在这种形式下,其构造的基础逻辑是最明确的.如果%% 60你的一些经度大于180或小于-180,那么就在那里.