输入从Latlong到UTM的意外转换输出

时间:2016-07-27 19:32:05

标签: r coordinates rgdal

我正在尝试将Latlong转换为UTM,但由于某种原因,来自R的结果与我所寻找的结果非常不同。

数据集只是一个观察点(圣保罗市):

的LatLong

圣保罗的经度:-46.633309

圣保罗的纬度:-23.550520

圣保罗的UTM坐标(WGS84)

圣保罗的UTM坐标(WGS84)为:23K E区:333287.02 N:7394586.09

来源:http://www.gps-latitude-longitude.com/gps-coordinates-of-sao-paulo

library(rgdal)
x<-c(-46.633309)
y<-c(-23.550520)
zone<-23
xy<-data.frame(ID = 1:length(x), X = x, Y = y)
coordinates(xy)<-c("X", "Y")
proj4string(xy)<-CRS("+proj=longlat +datum=WGS84")  ## for example
res<-spTransform(xy, CRS(paste("+proj=utm +zone=",zone,"ellps=WGS84",sep='')))
res

> res
         coordinates ID
1 (333287, -2605414)  1 
东方术语似乎是正确的,但北方与预期值(7394586.09不等于-2605414)非常不同。

谁能告诉我发生了什么事? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

问题是你在南半球,北方的起源不再是赤道而是南极。因此,请使用

 create function fn_daterange
   (
   @MinDate as datetime,
   @MaxDate as datetime,
   @intval  as datetime
   )
returns table
--**************************************************************************
-- Procedure: fn_daterange()
--    Author: Ron Savage
--      Date: 12/16/2008
--
-- Description:
-- This function takes a starting and ending date and an interval, then
-- returns a table of all the dates in that range at the specified interval.
--
-- Change History:
-- Date        Init. Description
-- 12/16/2008  RS    Created.
-- **************************************************************************
as
return
   WITH times (startdate, enddate, intervl) AS
      (
      SELECT @MinDate as startdate, @MinDate + @intval as enddate, @intval as intervl
         UNION ALL
      SELECT startdate + intervl as startdate, enddate + intervl as enddate, intervl as intervl
      FROM times
      WHERE startdate + intervl <= @MaxDate
      )
   select startdate, enddate from times;

go

请注意res<-spTransform(xy, CRS(paste("+proj=utm +south +zone=",zone,"ellps=WGS84",sep=''))) ## coordinates ID ##1 (333287, 7394586) 1 规范的+south添加。

希望这有帮助。