/!\ This project is deprecated. See http://mapfish.org or http://mapfish.github.io/mapfish-website.
This HowTo describes step by step how to use MapFish Server Framework to set up a MapFish project. A MapFish project defines Web Services on which MapFish Client components can rely. See here for a description of the interfaces provided by MapFish Web Services.
The Mapfish server for Ruby is implemented as a plugin for the Ruby on Rails framework.
A sample application is available at GitHub.
Create a new Rails project:
rails new MyMapFishProject --database=postgresql
cd MyMapFishProject
Rails 3: Add the mapfish plugin to your Gemfile:
gem 'mapfish'
Then from your project’s RAILS_ROOT, run:
bundle install
Rails 2: Add the mapfish plugin to your config/environment.rb:
config.gem 'mapfish'
Then from your project’s RAILS_ROOT, run:
rake gems:install
It is also possible to install mapfish as a plugin:
script/plugin install http://www.mapfish.org/svn/mapfish/implementations/rails-plugin/mapfish/trunk
Install the latest version of the Mapfish client libraries:
rake mapfish:install_client
If you don't have PostGIS database template yet, create one:
sudo su - postgres
createdb -E UTF8 template_postgis # Create the template spatial database.
createlang -d template_postgis plpgsql # Adding PLPGSQL language support.
psql -d template_postgis -f /usr/share/postgresql-8.3-postgis/lwpostgis.sql
psql -d template_postgis -f /usr/share/postgresql-8.3-postgis/spatial_ref_sys.sql
cat <<EOS | psql -d template_postgis
UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template_postgis';
REVOKE ALL ON SCHEMA public FROM public;
GRANT USAGE ON SCHEMA public TO public;
GRANT ALL ON SCHEMA public TO postgres;
GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE public.geometry_columns TO PUBLIC;
GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE public.spatial_ref_sys TO PUBLIC;
VACUUM FULL FREEZE;
EOS
Change the connection properties in config/database.yml
.
Add a line template: template_postgis
for each environment.
Create the development database, if it does not exist:
rake db:create
You now need to create layers. In effect, a layer corresponds to a PostGIS table.
Create a resource (model and controller):
rails generate mapfish:resource WeatherStation name:string geom:point --skip-timestamps --skip-fixture
rake db:migrate
Import some data:
rails runner "Geonames::Weather.weather(:north => 44.1, :south => -9.9, :east => -22.4, :west => 55.2).each { |st| WeatherStation.create(:name => st.stationName, :geom => Point.from_x_y(st.lng, st.lat)) }"
(needs lib/geonames.rb from http://github.com/pka/map_layers/raw/master/lib/geonames.rb)
Create a resource for an existing table:
rails generate mapfish:resource Country --skip-migration --skip-fixture
Insert table name and custom id in app/models/country.rb
:
set_table_name "world_factbk_simplified"
set_primary_key "gid"
You should be all set now. Try starting the web server:
rails server
and checkout http://localhost:3000/countries?maxfeatures=10
Your browser should be displaying a nice GeoJSON object!
You can now go back to your webpage and configure MapFish widgets to access your layer through the URL http://localhost:3000/countries
.
For running in production mode you should build and install the compressed runtime libraries:
rake mapfish:build_scripts
rake mapfish:copy_scripts
The development libraries in public/mfbase are not needed in a production deployment and the CSS and Javascript files can be included from public/javascripts:
<link rel="stylesheet" type="text/css" href="javascripts/ext/resources/css/ext-all.css" />
<link rel="stylesheet" type="text/css" href="javascripts/mapfish/mapfish.css" />
<script type="text/javascript" src="javascripts/ext/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="javascripts/ext/ext-all.js"></script>
<script type="text/javascript" src="javascripts/mapfish/MapFish.js"></script>
The Rails MapFish plugin can generate a controller for the MapFish print protocol <http://trac.mapfish.org/trac/mapfish/wiki/PrintModuleDoc#Protocol>
, to produce PDF outputs of your maps. (see MapFish PrintModuleDoc <http://trac.mapfish.org/trac/mapfish/wiki/PrintModuleDoc>
):
rails generate mapfish:print_controller Print
You'll need to have Sun's JRE <http://www.java.com/download/>
_ installed to make this working.
-
The print module should be ready & responding to /print/info.json to get print configuration. Don't forget to adapt config/print.yaml (see
configuration <http://trac.mapfish.org/trac/mapfish/wiki/PrintModuleServer>
_. For instance, you should at least allow the print service to access the WMS services you're using. If you're getting errors, check your log file to get debug information. -
Once this is done, you can integrate the
MapFish print widgets <http://www.mapfish.org/svn/mapfish/trunk/MapFish/client/mfbase/mapfish/widgets/print/>
_ into your client application, which give you the ability to output nice customizable PDF with your maps. Examples can befound here <http://demo.mapfish.org/mapfishsample/trunk/examples/print/>
_.
The Mapfish server plugin for Rails is released under the LGPL license.
Copyright (c) 2008-2010 Pirmin Kalberer, Sourcepole AG