سؤال

I am using Ruby 1.8.7 and Rails 2.3.8 and have a number of locations represented by a latitude and a longitude. I am using the SQLite SpatiaLite extension to convert the coordinates to the well-known binary (WKB) format. My concern is how to have ActiveRecord perform the insert or update, calling the appropriate SpatiaLite conversion methods. I am looking to do something like this:

obj.geometry = "AsBinary(MakePoint(4, 51))"
obj.save
# ActiveRecord would now do something like:
# INSERT INTO objects (geometry) VALUES (AsBinary(MakePoint(4, 51)))

Is this possible with ActiveRecord?

I have already tried GeoRuby but while its able to properly read WKB blobs, it is unable to save them to the same format SpatiaLite does.

Thanks!

هل كانت مفيدة؟

المحلول 2

After days of searching and coming up with no solution, I decided to simply leverage the raw connection to perform the actual insert:

rc = ActiveRecord::Base.connection.raw_connection
rc.execute("INSERT INTO objects (geometry)
            VALUES (MakePoint(#{obj.lng}, #{obj.lat}))")

نصائح أخرى

I didn't use GeoRuby yet, but for spatial data I used thinking-sphinx with @geodist function, and it's quite nice to use tool.

Some resources you can read about it:

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top