gpt4 book ai didi

ruby-on-rails - Rails - PostGIS + postgis_adapter 几何问题

转载 作者:数据小太阳 更新时间:2023-10-29 07:38:34 28 4
gpt4 key购买 nike

我使用 postgis_adapter以及基于 Ruby 1.9.2 的 PostgreSQL 9.0.4、PostGIS 1.5.2 和 Rails 3.1.0。如 postgis_adapter README 中所述,我尝试执行

Model.create(:geom => Point.from_x_y(10,20))

Postgres 响应

ERROR: parse error - invalid geometry
HINT: You must specify a valid OGC WKT geometry type such as POINT, LINESTRING or POLYGON

创建的 GeoRuby 对象如下所示:

#<GeoRuby::SimpleFeatures::Point:0x0000010420a620 @srid=4326, @with_z=false, @with_m=false, @y=20, @x=10, @z=0.0, @m=0.0>

希望有人有想法。

最佳答案

执行摘要:如果将其更改为:它可能会起作用:

Model.create(:the_name_of_your_geo_column => Point.from_x_y(10,20))

更长的版本,Ruby 咆哮的概率很高:我几乎没有写过一个字的 rb,但是这周看到了太多伟大的项目,处于一种无知的状态。处理 irb 中的错误消息(语言从 0 开始,但对 PostGIS 非常熟悉):

ActiveRecord::Base.establish_connection(:adapter=>'postgresql',:database=>'moveable')

pt = TablePoint.new(:data => "Hello!",:geom => Point.from_x_y(1,2))
NameError: uninitialized constant Point

因此,需要“postgis_adapter”,但随后:

PGError: ERROR:  relation "table_points" does not exist

这一定是我听说过的 ActiveRecord 中令人敬畏的命名约定。所以创建一个名为 table_points 的表,因为我不知道数据库模型/同步方法是什么。

moveable=> create table table_points(data text, geo_something geometry);

请注意,我在这里使用了 geometry 而不是 geography 因为我对您的问题的第一直觉是数据库适配器层中的建模方法创建了点类型。实际上一点也不。然后再次在 irb 中,

pt = TablePoint.new(:geom => Point.from_x_y(1,2))
ActiveRecord::UnknownAttributeError: unknown attribute: geom

没有名为 geom 的属性?看看会发生什么,再次在 psql 中:

moveable=> alter table table_points add column geom geometry;
ALTER TABLE

然后:

irb(main):014:0> pt = TablePoint.new(:geom => Point.from_x_y(10,20))
=> #<TablePoint data: nil, geo_something: nil, geom: #<GeoRuby::SimpleFeatures::Point:0x1022555f0 @y=20, @with_m=false, @x=10, @m=0.0, @with_z=false, @z=0.0, @srid=-1>>
irb(main):015:0> pt.save
=> true

难以置信!如果我这样做了怎么办:

pt = TablePoint.new(:data => 'is this even possible?', :geom => Point.from_x_y(38,121), :geo_something => Point.from_x_y(37,120))
=> #<TablePoint data: "is this even possible?", geo_something: #<GeoRuby::SimpleFeatures::Point:0x102041098 @y=120, @with_m=false, @x=37, @m=0.0, @with_z=false, @z=0.0, @srid=-1>, geom: #<GeoRuby::SimpleFeatures::Point:0x1020410c0 @y=121, @with_m=false, @x=38, @m=0.0, @with_z=false, @z=0.0, @srid=-1>>
irb(main):023:0> pt.save
=> true

更不可思议!

moveable=> select * from table_points;
data | geo_something | geom
--------+-----------------+--------
| | 0101000000000
| 010100000000000 |
| 010100000000000 |
...ble? | 00005E400000000 | 010000405E40
(4 rows)

由于对 Ruby 从根本上不熟悉,所以我犹豫要不要将此作为答案发布,但上述方法有效(对我来说是令人费解的),并且您可以根据自己的情况进行调整。

关于ruby-on-rails - Rails - PostGIS + postgis_adapter 几何问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5956315/

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