【问题标题】:RGeo 0.5.2 and RGeo::CoordSys::SRSDatabase::ActiveRecordTableRGeo 0.5.2 和 RGeo::CoordSys::SRSDatabase::ActiveRecordTable
【发布时间】:2016-04-06 23:20:21
【问题描述】:

首先,如果这真的很简单,我很抱歉,但我似乎无法弄清楚。我正在使用 RGeo 在 UTM 和纬度/经度之间进行转换,就像这样;

 srs_database = RGeo::CoordSys::SRSDatabase::ActiveRecordTable.new

 # create the coordinate factory for the relevant UTM zone
 utm_factory = RGeo::Cartesian.factory(:srid => srid,
                                       :srs_database => srs_database)
 utm_location = utm_factory.point(easting, northing)

 # create the standard WGS84 lat/long coordinate factory
 wgs84_proj4 = '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs'
 wgs84_factory = RGeo::Geographic.spherical_factory(proj4: wgs84_proj4, :srid => 4326)

 # perform the UTM -> lat/long cast
 RGeo::Feature.cast(utm_location, :factory => wgs84_factory, :project => true)

如您所见,我使用的是RGeo::CoordSys::SRSDatabase::ActiveRecordTable

我刚刚升级到RGeo 0.5.2,我注意到这个类已被弃用。

很公平,但我现在不确定替代方法是什么……我已经四处寻找,似乎找不到合适的文档。

另外,我原来的方法对我来说总是有点复杂 - 有没有更简单的方法来完成 UTM -> 使用 RGeo 进行纬度/经度转换?

提前致谢!

【问题讨论】:

    标签: rgeo


    【解决方案1】:

    好的,实际上我很快就解决了这个问题。这对我有用:

     if hemisphere == 'S'
       srid = 32700 + number.to_i
       utm_proj4 = "+proj=utm +zone=#{zone} +south +datum=WGS84 +units=m +no_defs"
     else
       srid = 32600 + number.to_i
       utm_proj4 = "+proj=utm +zone=#{zone} +datum=WGS84 +units=m +no_defs"
     end
    
     # create both the UTM and lat / long factories (we will project between them)
     utm_factory = RGeo::Cartesian.simple_factory(srid: srid, proj4: utm_proj4)
     wgs84_factory = RGeo::Geographic.spherical_factory(srid: 4326, proj4: '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')
    
     # create the UTM location
     utm_location = utm_factory.point(easting, northing)
    
     # perform the UTM -> lat/long cast
     RGeo::Feature.cast(utm_location, :factory => wgs84_factory, :project => true)
    

    我正在根据从spatial_ref_sys 表中提取的 Proj4 字符串创建自己的工厂。

    虽然我不确定这是否“正确”,但可能有更好的方法。

    但我希望这对某人有所帮助! :)

    【讨论】:

    • 非常有帮助!!谢谢你。我需要围绕这个工厂模式展开我的工作......
    【解决方案2】:

    另一种方法:

    EPSG_4326 = RGeo::CoordSys::Proj4.new("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
    EPSG_3857 = RGeo::CoordSys::Proj4.new("+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378137 +b=6378137 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
    
    RGeo::CoordSys::Proj4.transform(EPSG_3857, geom, EPSG_4326, RGeo::Geographic.spherical_factory)
    

    生成具有适当坐标的新RGeo::Geographic::SphericalPointImpl

    【讨论】:

    • 不错的一个!这样更简洁!
    猜你喜欢
    • 1970-01-01
    • 2015-06-12
    • 2021-07-31
    • 2015-05-16
    • 2021-08-01
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 2016-05-18
    相关资源
    最近更新 更多