dB'
dB'

Reputation: 8330

How to store room shape data in Rails?

I'm writing a Rails app that needs to store shape data representing the floor plans of public spaces. The spaces are mostly churches and concert halls. Many shapes will be very simple ("fans" or "shoeboxes") but some will be more complex (e.g. like this).

I'm fairly new to Rails and totally new to GIS applications. (Is this a GIS problem? I'm not sure.)

Can anyone suggest what sort of data type I should use to store this information in my database? Should room shapes be stored as polygons? Or is there a more appropriate data type, such as one that can more accurately represent the curved surfaces found in some venues?

Upvotes: 2

Views: 178

Answers (1)

cdesrosiers
cdesrosiers

Reputation: 8892

This is probably not the most efficient way to do this but you might start out by defining some models such as:

class Path
    has_many :nodes
end

class Node
    attr_accessible :x, :y, :next_id
    belongs_to :next, class_name: 'Node'
    has_one :arc_extension
end

class ArcExtension
    attr_accessible :radius, :x1, :y1, :x2, :y2
    belongs_to :node
end

A path would just be a collection of nodes. Each node would store the coordinates of a point on the path along with the id of the next node in the path. If you want a node to represent the beginning of an arc, you can create an arc extension for that node. An arc_extension might store the radius of the arc along with two reference points needed to construct the arc. For a reference on how these reference points might be defined, you might look into the arcTo method used in the HTML5 canvas: http://dbp-consulting.com/tutorials/canvas/CanvasArcTo.html .

You should be able to change this method a bit if you want to represent other types of curved paths (such as Bezier curves).

Upvotes: 1

Related Questions