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定义的几何或地理数据类型的列中,然后数据可以是以最终用户所需的任何形式进行分析和呈现. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- c# – 错误“IEntityChangeTracker的多个实例无法引用实体对
- 正则表达式(1)
- 我的应用程序的C#或Python
- 依赖注入在 dotnet core 中实现与使用:1 基本概念
- reactjs – ESLint React-Router v4 – 如何验证Match para
- 为什么strcpy()和strcat()在嵌入式域中不好用
- c# – 如何防止EF验证在DBContext.SaveChanges()期间未映射
- 某电商项目PostgreSQL数据库备份恢复方案
- oracle 实现分页
- ruby-on-rails – Rails Mac OS X:libMagickCore-Q16.7.dy