加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Postgis纬度/经度读出反转

发布时间:2020-12-17 02:55:16 所属栏目:百科 来源:网络整理
导读:我有一个类Geocoordinateable,它为模型提供了一些处理地理坐标的有用方法.其中包括接受数组的“geocoordinates =”. https://gist.github.com/mboyle/58dd3add830bbdeef316 您可以调用“geocoordinates”来获取数组中的坐标: irb(main):056:0 b.geocoordina
我有一个类Geocoordinateable,它为模型提供了一些处理地理坐标的有用方法.其中包括接受数组的“geocoordinates =”.

https://gist.github.com/mboyle/58dd3add830bbdeef316

您可以调用“geocoordinates”来获取数组中的坐标:

irb(main):056:0> b.geocoordinates
=> [-118.25,34.197]

当我分配这样的坐标时:

irb(main):058:0> b.geocoordinates = [34.197,-118.25]
   (1.8ms)  
 UPDATE users
 SET geocoordinates = 'SRID=4326;POINT(' || 34.197 || ' ' || -118.25 || ')'
 WHERE id = 347708

   (0.7ms)  
 UPDATE activities
 SET geocoordinates = users.geocoordinates
 FROM users
 WHERE activities.user_id = users.id
 AND users.id = 347708
 AND NOT postgis.ST_Equals(activities.geocoordinates,users.geocoordinates)

=> [34.197,-118.25]

事情似乎得救并正确出来.但是,如果我再次查询模型,然后读取地理坐标,则反转纬度/经度:

irb(main):059:0> b = User.find(b.id)
irb(main):060:0> b.geocoordinates
   (0.7ms)  
 SELECT postgis.ST_Y(geocoordinates) AS latitude,postgis.ST_X(geocoordinates) AS longitude
 FROM users
 WHERE id = 347708

=> [-118.25,34.197]

我不能为我的生活理解为什么会这样.有人有线索吗?

解决方法

在PostGIS中,坐标以(X,Y)顺序设置,或(经度,纬度)设置为地理坐标对.所以你应该这样做:

UPDATE users
SET geocoordinates = 'SRID=4326;POINT(' || -118.25 || ' ' || 34.197 || ')'
WHERE id = 347708

然后可能也是:

irb(main):058:0> b.geocoordinates = [-118.25,34.197]

请注意,PostGIS以OGC指定的已知文本(WKT)格式提取文本数据.该标准规定了(X,Y)或(lon,lat)顺序.因此,这不是一个选择,需要使PostGIS能够摄取由其他符合OGC标准的软件生成的WKT文件.在摄取WKT之后,PostGIS将数据以其内部格式存储,实际上是稍微修改的OGC熟知二进制(WKB)格式,在具有PostGIS定义的几何或地理数据类型的列中,然后数据可以是以最终用户所需的任何形式进行分析和呈现.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读