gpt4 book ai didi

ruby-on-rails - 为 RGeo Point 设置单个坐标

转载 作者:行者123 更新时间:2023-12-04 09:00:30 25 4
gpt4 key购买 nike

RGeo 为 POINT 特性提供内置方法,例如 getter 方法 lat()lon()从 POINT 对象中提取纬度和经度值。不幸的是,这些不能作为二传手。例如:

point = RGeo::Geographic.spherical_factory(:srid => 4326).point(3,5)     // => #<RGeo::Geographic::SphericalPointImpl:0x817e521c "POINT (3.0 5.0)">

我可以做这个:
point.lat      // => 5.0
point.lon // => 3.0

但我不能这样做:
point.lat = 4    // => NoMethodError: undefined method `lat=' for #<RGeo::Geographic::SphericalPointImpl:0x00000104024770>

关于如何实现 setter 方法的任何建议?你会在模型中做还是扩展 Feature 类?

最佳答案

我是 RGeo 的作者,因此您可以在此基础上认为此答案具有权威性。

简而言之,请避免这样做。 RGeo 对象故意没有 setter 方法,因为它们是不可变的对象。这是为了它们可以被缓存、用作散列键、跨线程使用等。一些 RGeo 计算假设特征对象的值永远不会改变,因此进行这样的更改可能会产生意外和不可预测的后果。

如果您真的想要“更改”的值,请创建一个新对象。例如:

p1 = my_create_a_point()
p2 = p1.factory.point(p1.lon + 20.0, p2.lat)

关于ruby-on-rails - 为 RGeo Point 设置单个坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13432860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com