我正在使用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>
我做错了什么?
答案 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)