Proj4rb:将纬度/经度转换为robinson投影

时间:2012-11-30 18:40:22

标签: ruby proj

我正在使用Proj4rb gem将纬度和经度坐标转换为Robinson projection中的某个点。这将用于确定将图钉放置在地图图像上的位置。

我正在尝试(纽约)的一个例子是:

  robinson_projection = Proj4::Projection.new('+proj=robin +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m +no_defs')

  source_point = Proj4::Point.new(40.7142, -74.0064)
  source_projection = Proj4::Projection.new("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")

  projected_point = source_projection.transform(robinson_projection, source_point)

这引发了以下异常:

#<Proj4::LatitudeOrLongitudeExceededLimitsError: latitude or longitude exceeded limits>

我做错了什么?

2 个答案:

答案 0 :(得分:0)

我看到两个错误,好奇一个是原因:

纽约有:lat / lon:40.713956,-74.00528
第一个错误:
纽约有一个负经度坐标,你写的是74.0064

第二:
Point.new(x,y)中的long,lat的顺序应该是long,lat,反之亦然 请查看文件!

所以正确的是:

source_point = Proj4::Point.new(-74.0064, 40.7142);

答案 1 :(得分:0)

问题出在您的源点(lat,lng)内。试试这个:

robinson_projection = Proj4::Projection.new('+proj=robin +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m +no_defs')

lat = 40.7142
lon = -74.0064
source_point = Proj4::Point.new(Math::PI * lon.to_f / 180,
                                Math::PI * lat.to_f / 180)
source_projection = Proj4::Projection.new("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")

projected_point = source_projection.transform(robinson_projection, source_point)