Proj4rb:将纬度/经度转换为罗宾逊投影



>我正在使用 Proj4rb gem 将纬度和经度坐标转换为罗宾逊投影中的一个点。 这将用于确定在地图图像上放置图钉的位置。

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

  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>

我做错了什么?

我看到两个错误,很好奇其中一个是否是原因:

纽约有 : 纬度: 40.713956,-74.00528
第一个错误:
纽约有一个负经度坐标,你写了 74.0064

第二:
Point.new(x,y) 中 long, lat 的顺序应该是 long, lat,反之亦然请与文档核实!

所以正确的是:

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

问题出在您的源点(纬度、液化天然气)内。试试这个:

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)

最新更新