我正在编写一个需要多个纬度/经度点的程序,并且我将它们在内部转换为UTM,以便以米为单位进行一些计算。
纬度/经度点本身的范围非常小——大约 200m x 200m。可以信赖它们几乎总是位于单个 UTM 区域内(除非您不幸跨越区域边界)。
但是,纬度/经度所在的区域不受限制。有一天,该计划可能会为澳大利亚的人们运行(哦,即使是一个州也跨越多少个区域,这已经给我带来了多少痛苦……),另一天则为墨西哥的人们运行。
我的问题是——有没有办法确定特定的经/纬度位于哪个区域,以便可以将其输入转换库(我目前使用 proj4 以及 R 包 rgdal )。
我的语言是 R,但答案不一定是——也许这只是一个简单的计算,或者我可以将系统调用嵌入到 proj
可执行文件中。
干杯。
I'm writing a program which expects a number of lat/long points, and I convert them internally to UTM in order to do some calculations in metres.
The range of the lat/long points themselves is quite small -- about 200m x 200m. They can be relied on almost always to be within a single UTM zone (unless you get unlucky and are across the border of a zone).
However, the zone that the lat/longs are in is unrestricted. One day the program might be run for people in Australia (and oh, how many zones does even a single state lie across, and how much pain has that caused me already...), and another day for people in Mexico.
My question is -- is there a way to determine which zone a particular long/lat is in so that it may be fed into a conversion library (I currently use proj4 and also the R package rgdal
).
My language is R, but the answer doesn't have to be -- maybe it's just a simple calculation, or maybe I can embed a system call to the proj
exectuable.
cheers.
发布评论
评论(6)
编辑:对于适用于地球上所有非极地区域的(非R)代码,请参阅此处 或 这里。
除非您处理的是来自几个特殊区域的数据(斯瓦尔巴群岛和挪威部分地区) ,这是一个足够简单的计算,您不妨自己在 R 中进行计算。这里是 维基百科关于经度与 UTM 区域编号关系的描述:
因此,假设在您的数据中,本初子午线以西的经度被编码为从 - 180 到 0 度,这是上面的 R 代码版本:
该表达式显然可以简化一点,但我认为在这种形式中,其构造背后的逻辑是最清晰的。
%% 60
位位于其中,以防某些经度大于 180 或小于 -180。Edit: For (non-R) code that works for all non-polar areas on earth, see here or here.
Unless you are dealing with data from a couple of exceptional areas (Svalbard and parts of Norway), this is a simple enough calculation that you might as well just do it yourself in R. Here is Wikipedia's description of how longitude relates to UTM Zone number:
So, assuming that in your data longitudes to the west of the Prime Meridian are encoded as running from -180 to 0 degrees, here's an R-code version of the above:
That expression could obviously be simplified a bit, but I think in this form the logic underlying its construction is most clear. The
%% 60
bit is in there just in case some of your longitudes are greater than 180 or less than -180.我使用之前的答案为我制作了这个功能。
也许对这里的人有用=)
I made this function for me using the previous answers.
Maybe it is useful to someone here =)
我不知道 r 代码,但我想这个 PL/SQL 代码可以帮助您解决例外情况:
I don't know r-code but I suppose this PL/SQL code can help you with the exceptions:
所以我今天遇到了这个问题,我需要从纬度/经度找到全球各地点的 UTM 区域。问题在于,存在所有这些卷曲边缘情况,例如斯瓦尔巴群岛、挪威和两极:(在此地图上以红色显示),如果您认为这就是全部,这会让您感到困惑 常规的!
这是我的 R 函数,用于从纬度/经度对中查找 UTM 区域,并在最后对所有卷曲边缘情况进行测试。
使用示例
测试它是否有效:
So I had this problem today, that I needed to find the UTM zone from lat/long for points all over the globe. The trouble is that there's all these curly edge cases like Svalbard, Norway, and the poles: (shown in red on this map) which will catch you out if you assume it's all regular!
Here's my R function to find UTM zones from lat/long pairs, with tests at the end for all of the curly edge cases.
Example of use
Test that it worked:
TypeScript 版本,基于 Luiz Bondis 摘要:
Version for TypeScript, based on Luiz Bondis summary:
Python版本:
Python version: