我正在尝试将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)非常不同。
谁能告诉我发生了什么事? 提前谢谢。
答案 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
添加。
希望这有帮助。