Spatial Features
Adds spatial methods to a model.
Migration
execute("
CREATE TABLE features (
id integer NOT NULL,
spatial_model_type character varying(255),
spatial_model_id integer,
name character varying(255),
feature_type character varying(255),
geog geography,
geom geometry(Geometry,3005),
geom_lowres geometry(Geometry,3005),
kml text,
kml_lowres text,
metadata hstore,
area double precision,
north numeric(9,6),
east numeric(9,6),
south numeric(9,6),
west numeric(9,6),
centroid geography,
kml_centroid text
);
CREATE TABLE spatial_caches (
id integer NOT NULL,
intersection_model_type character varying(255),
spatial_model_type character varying(255),
spatial_model_id integer,
created_at timestamp without time zone,
updated_at timestamp without time zone,
intersection_cache_distance double precision,
features_hash character varying(255)
);
CREATE TABLE spatial_proximities (
id integer NOT NULL,
model_a_type character varying(255),
model_a_id integer,
model_b_type character varying(255),
model_b_id integer,
distance_in_meters double precision,
intersection_area_in_square_meters double precision
);
")
Usage
In your model
class Location < ActiveRecord::Base
has_spatial_features
end
Person.new(:features => [Feature.new(:geog => 'some binary PostGIS Geography string')])
Import
You can specify multiple import sources for geometry. Each key is a method that returns the data for the Importer, and each value is the Importer to use to parse the data. See each Importer for more details.
class Location < ActiveRecord::Base
has_spatial_features :import => { :remote_kml_url => 'KMLFile', :file => 'File' }
def remote_kml_url
"www.test.com/kml/#{id}.kml"
end
def file
File.open('local/files/my_kml')
end
end