Use Public Lab's open source MapKnitter to upload your own aerial photographs (for example those from balloon or kite mapping: http://publiclab.org/balloon-mapping) and combine them into:
- Web "slippy maps" like Google Maps
- GeoTiff
- TMS
- High resolution JPEG
- Architecture
- Installation
- Logging in when running locally
- Bugs and support
- Developers
- Staging infrastructure and testing
- License
- MapKnitter in depth
MapKnitter is broken into three major components:
- Map user interface
- Application
- Exporting system
Component 1 has been broken out into a new Leaflet plugin, Leaflet.DistortableImage, which allows for client-side, CSS3-based distortion of images over a Leaflet base map
Component 2 is a Ruby on Rails application which is the core of what you've looked at. It stores images, image corner locations, annotations, map details, and user accounts.
Component 3 is a set of calls to GDAL (Geospatial Data Abstraction Library) and ImageMagick, which perform the distortions, geolocations, and produce export products like GeoTiff, TMS, jpg, etc. These are baked into the Warpable and Map models, as well as the Export controller, and could use some consolidation.
Component 3 is soon to be replaced with an external exporter service built in a small Sinatra app called mapknitter-exporter-sinatra using the mapknitter-exporter gem.
Another moving part is the new-ish Annotations 2.0 which uses Leaflet.Illustrate to provide rich annotation on top of maps.
Please consider which installation method you prefer. Cloud Installation requires fewer steps and is platform agnostic, but you may value working from your terminal, for familiarity, more.
Make sure you have the below 3 prerequisites installed before moving forward with the Installation Steps.
Instructions are for an Ubuntu/Debian system. Varies slightly for mac/fedora/etc.
MacOS and Linux users, please reference MYSQL.md instead.
- Install MYSQL:
$ sudo apt-get install mysql-server
- Application-specific dependencies:
$ sudo apt-get install bundler libmysqlclient-dev imagemagick ruby-rmagick libfreeimage3 libfreeimage-dev ruby-dev libmagickcore-dev libmagickwand-dev
- (Optional): For exporting, you'll need GDAL >=1.7.x (gdal.org), as well as
curl
andzip
-- but these are not needed for much of development, unless you're working on the exporting features.
$ sudo apt-get install gdal-bin python-gdal curl libcurl4-openssl-dev libssl-dev zip
==================
This is for RVM, but the alternative, rbenv, also works (instructions not listed here). Don't install RVM if you already have rbenv!
- Install RVM: (http://rvm.io)
$ curl -L https://get.rvm.io | bash -s stable
-
At this point during the process, you may want to log out and log back in, or open a new terminal window; RVM will then properly load in your environment.
- Ubuntu users only: you may need to enable
Run command as a login shell
in Ubuntu's Terminal, under Profile Preferences > Title and Command. Then close the terminal and reopen it.
- Ubuntu users only: you may need to enable
-
Use RVM to install version 2.4.6 of Ruby:
$ rvm install 2.4.6
==================
We use Yarn as our package manager, which is available through npm.
- Install npm:
$ sudo apt-get install npm
- Ubuntu users only: you may need to also install the
nodejs-legacy
package, as due to a naming collision, some versions of Ubuntu already have an unrelated package callednode
. To do this, run:
$ sudo apt-get install nodejs-legacy
- Once npm is installed, you should be able to use it to install Yarn:
$ npm install -g yarn
NOTE: Refer this in case NPM throws permission errors
==================
You'll need Ruby v2.4.6 (use your local ruby version management system - RVM or rbenv - to install and set locally)
- Download a copy of the source with
git clone https://github.com/publiclab/mapknitter.git
- Install gems with
bundle install
from the rails root folder. You may need to runbundle update
if you have older gems in your environment. - Copy and configure config/database.yml from config/database.yml.example, using a new empty database you've created
- Copy and configure config/config.yml from config/config.yml.example (for now, this is only for the Google Maps API Key, which is optional, and a path for logging in when running locally, also optional)
- Initialize database with
bundle exec rails db:setup
- Enter ReCaptcha public and private keys in config/initializers/recaptcha.rb, copied from recaptcha.rb.example. To get keys, visit https://www.google.com/recaptcha/admin/create
- Install static assets (like external javascript libraries, fonts) with
yarn install
- Start rails with
bundle exec rails s
from the Rails root and open http://localhost:3000 in a web browser. (For some, justrails s
will work; addingbundle exec
ensures you're using the version of passenger you just installed with Bundler.)
==================
For a run-through of the Prerequisites and Installation steps listed below, you can watch the install video at:
http://youtu.be/iGYGpS8rZMY (may be slightly out of date, but gives an overview)
We provide an install script for Codenvy's cloud service, which provides a free developer workspace server that allows anyone to contribute to a project without installing software: https://Codenvy.io.
To use it:
- Create a personal account.
- Click
Create new workspace
. - Select a new workspace with a
Rails
stack. - Under the
Projects
section, add the URL of your forked version of mapknitter (https://github.com/USERNAME/mapknitter.git
). - Hit create.
- It will open in the projects explorer - use the
bash
console at the bottom of the screen tocd
into this project's directory. - Run the installation script. The initial installation may take a bit.
$ source install_cloud.sh
- When you see it's complete, run the server:
$ rails server -b 0.0.0.0
- Hit the Play button located in the top menu bar.
- Open the Codenvy URL provided in the console to see MapKnitter booted up. Great work!
We recommend you either work in a virtual environment, or on a dual booted system to avoid dependencies issues and also Unix system works smoother with Ruby and Rails. This will not only benefit you now for Mapknitter, but also in future while working on other Ruby projects, a Linux or Mac OS will make your life easier.
Because MapKnitter uses a remote OpenID login system that depends on PublicLab.org, it can be hard to log in when running it locally. To get around this, we've created a local login route that requires no password:
You can log in locally at the path http://localhost:3000/local/USERNAME
where USERNAME
is any username.
For this to work:
-
You will need to have copied and configured config/config.yml from config/config.yml.example
-
The user has to be an existing record. For your convenience, we have added two user accounts in seeds.rb to make their corresponding paths available in development after installation:
# basic account path - http://localhost:3000/local/harry
# created from:
User.create({login: 'harry', name: 'harry potter', email: '[email protected]'})
# admin account path - http://localhost:3000/local/albus
# created from:
u_admin = User.create({login: 'albus', name: 'albus dumbledore', email: '[email protected]'})
u_admin.role = 'admin'
When you try to run tests in MapKnitter, you can run the default Rake tasks, such as:
rails test:unit
rails test:controllers
rails test:integration
or simply:
rails test
rails test test/unit/some_file.rb
rails test test/functional/some_file.rb:[line number of the test]
To report bugs and request features, please use the GitHub issue tracker provided at https://github.com/publiclab/mapknitter/issues
For additional support, join the Public Lab website and mailing list at http://publiclab.org/lists or for urgent requests, email [email protected]
For questions related to the use of this software and balloon or kite mapping, the same page links to the "grassrootsmapping" discussion group.
Please read and abide by our Code of Conduct; our community aspires to be a respectful place both during online and in-person interactions.
Help improve Public Lab software!
- Join the '[email protected]' discussion list to get involved
- Look for open issues at https://github.com/publiclab/mapknitter/issues
- Review contributor guidelines at http://publiclab.org/wiki/contributing-to-public-lab-software
- Some devs hang out in http://publiclab.org/chat (irc webchat)
- Find lots of info on contributing at http://publiclab.org/wiki/developers
- Join our gitter chat at https://gitter.im/publiclab/publiclab
In addition automatic testing with Travis CI - we have a branch (unstable
) is set to auto-build and deploy to a staging instance. This instance includes a copy of the production database and is intended for experimenting or debugging purposes with a production-like environment. We also have a stable
build at http://mapknitter-stable.laboratoriopublico.org/ which builds off of our main
branch. Any commits or PRs merged to the main branch will trigger the stable
server to rebuild; you can monitor progress at https://jenkins.laboratoriopublico.org/
MapKnitter is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
MapKnitter is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with MapKnitter. If not, see http://www.gnu.org/licenses/.
MapKnitter is a free and open source software created and run by Public Lab. MapKnitter is hosted through a donation of server space by Rackspace.
MapKnitter can make maps from any image source, but it particularly lends itself to making maps with balloons and kites. The manual process of making maps with MapKnitter differs greatly from automated aerial imaging systems. In those systems, the imaging is of higher precision and processed with spatial and telemetry data collected along with the imagery, typically at higher altitudes and with consistent image overlap in the flight path sequence.
With MapKnitter the cartographer dynamically places each image and selects which images to include in the mosaic. Although the approaches are similar in that they use some type of additional information (usually pre-existing imagery of a lower resolution) as a reference, and that they are bound to specific cartographic elements such as map scale and map projection.