Geopard Indoor Outdoor RTLS & Mapping

From OpenStreetMap Wiki
Jump to: navigation, search

Geopard is a toolset including clients & server allowing one to host, edit and browse indoor&outdoor zones containing objects under <5m precision. The project namely contains an Android-based mobile client that will do wifi-geopositioning. Geopard is an end-of-studies project being developed by french IT engineering students till at least end of January 2010 ; the team competed in the Concours SFR Innovation Jeunes Talents 2010 challenge organised by french mobile communications provider SFR, though without winning.

Project goals

Geopard is an open-source desktop, server and embedded software project aiming -in the long term- at mapping indoor and outdoor spaces with "human-size" precision. Compared to what the regular is doing, Geopard will allow:

  • more zoom levels (probably 0->24) to be able to see boundaries of objects ~1m large at most.
  • switching floors (+1/-1) of indoor areas (buildings, parking lots, commercial centers...)
  • accessing geopositioned web pages for specific services (eg. commercial center: find shoes with price < N€ in this , train station: when's the next train for Paris Invalides from this station and on which platform should I go ?, hospital: show this room's patient electronical medical record)
  • wifi geopositioning on Java-based Internet-enabled devices (2G,3G phones, laptops) thanks to hybrid triangulation and statistical algorithms

Geopard on the web

software components

Geopard has 3 kinds of software components:

Geopard Server (development ongoing)

  • what it does: serves tiles and map data through some HTTP API
  • current implementation: an Openstreetmap-based server serving map data and tiles. We have a Rails port (+Rails postgres db), Mapnik (+PostGIS +mod_tiles&renderd).

from :

I'm proposing anyone to ask us for an access to amazon EC2 snapshot of the Geopard server. The OSM stack has these landmarks:

  • localhost (not from minutely Rails-port/osmosis read-replication-interval (rri) => postgis db
  • increased rendering zoom levels (22 instead of 17) thanks to a modified mod_tile/renderd build
  • 1 mod_tile tileset = 1 .xml file per buidling level
  • a sample openlayers viewer page to switch display between level layers

Geopard Admin (development stopped)

  • what it does: some GUI application allowing to easily edit Geopard Server's human-size objects, areas, wifi-related data, geopositioned web pages URLs etc.
  • Steps to create a building are :
    • Download data as background or place geolocated nodes and work in their areas
    • Use JOSM PicLayer plugin to overlay and reorient Google Map screenshot or use Yahoo Open Aerials or photogrammetry-resulting 2D top view
    • Draw the buildings' contours if not present and fill in the buildings levels one after the other using buttons to filter the view
    • Upload the buildings contour and contents to the buildings-containing GIS server (OSM software or not).

Geopard Admin / Desktop (development stopped)

  • current implementation: a JOSM-based editor with custom config files and a Geopard JOSM plugin

Geopard Admin / Web

  • current implementation: not planned for now, could be a mod of potlatch

Geopard Client

  • what it does: some GUI application allowing to browse Geopard Server's maps, search the latter for POIs, use geopositioned web pages

Geopard Client / Mobile (development stopped)

  • what it does: a mobile client running on Internet-able smartphones, earlier generation phones or laptops. When those devices have Wifi-capability, they can do wifi-geopositioning.
    • current implementation: a Nutiteq maps-lib-based Android (for now) mobile application doing both Geopard Server’s maps display and wifi geopositioning within those maps. Nutiteq's library is fully J2ME compliant so our mobile app should be portable to other mobile OSes with only GUI rewriting. The wifi-geopositioning stack is home made in Java completely on the mobile device side.

Geopard Client / Web

  • what it does: a web Geopard Server's maps browser.
  • current implementation: not planned for now, could be a Slippy Map/OpenLayers mod.

Geopard Client / Desktop

  • what it does: desktop map browser application for PC/Mac (eg.for big LCD touch screen at beginning of commercial centers).
  • current implementation: not planned for now.

Architecture diagram


Server implementation details

This implementation describes a GIS server using openstreetmap software. We're planning to have a try at instead because it would have us "advantages" of having both OGC & easy web services integration (for now with OSM software, your webservices can be either a hack in the rails port or separate script files that fetch the Rails port or PostGIS db hand data to you, we're ok to hack this, but having new services known to any client through an OGC' GetCapabilities method looks cool, as well as having map features tightly related to documents (instead of the URL=otherRelatedDocument key=value simplest OSM way of doing it, or extending a PostGIS database with new tables)).

Base distribution

  • We are working on an Amazon EC2 32 bit instance EBS backed/boot vanilla Ubuntu 8.04 image by Eric Hammond.

Installation steps and scripts

  • We are installing everything from scratch step by step, writing down all that we do as to reproduce those steps later. We want to have an easy to use (why not controllable in a web interface) set of scripts to deploy each of the software components on a vanilla ubuntu 8.04 (for now) with little technological required by the end-user. We need big help on this now !!!

Final server deliverables

Several images as Amazon EC2 EBS boot images :

  1. An generic Rails + tiles image with no config scripts: once we have a rails port (done) + mapnik (done) + render_tiles (started) & minutely diffs (not started) setup ready.
    1. A Geopard indoor+outdoor-precision image with no config scripts: not ready...
    2. A Geopard indoor+outdoor-precision image with nice handy config scripts: not ready... development of the handy config scripts is not there.
  2. Independent handy install scripts:
    1. to help install (1.) a generic rails+tiles setup on a vanilla ubuntu 8.04 server
    2. to help install (2.) an indoor+outdoor-precision setup on a vanilla ubuntu 8.04 server


Prior tasks

  1. Open-source all our old stuff : editor, osm server stack, android code.
  2. Setup a launchpad or git* space because publishing patches is not practical otherwise

Server roadmap

Things happen in 3 branches each being one step further from standard osm setup towards a indoor-oriented osm setup

  1. standard osm branch: make standard keyturn osm server linux image with community :
    1. Where standard means having the bottom blue boxes in OSM software components overview deployed. The setup is basically : OSM v0.6 api vector I/O<=rails port=>postgres=>osmosis=>osm2pgsql=>postgis=>mod_tile/renderd=>mapnik=>tiles download.
    2. We don't change any zoom level, stylesheets or webservices from what's already provided here
    3. One should hopefully be able to enable any of the following sync mechanisms, able to work independently or together:
      1. sync PostGIS db frequently from osm
      2. frequent Rails port db data sync
  2. standard osm+zoo wps branch : branch regular keyturn linux osm and add zoo-project so we have a friendly osm+easy wps adding for others to reuse
  3. standard osm+zoo wps+indoor changes branch  : branch from before and add indoor customization (probably Tirex, variable zoom level, dynamic stylesheet generation, custom webservices...)

Mobile client roadmap

  1. Isolate indoor classes from android client to make them reusable from both android & J2ME/MIDP client.

Main user scenarios

Note : not all scenarios are here. Namely, only those needed to help foster Geopard/ZOO-project development are written there.

First scenario : Administrator read/writing indoor maps

Read (for a full new map) I.A OR I.A, then II.

Administrator creates map from raster image (eg. .png) => .osm

I.A.1) administrator takes a building / level security or architecture paper map, scans it, obtains a raster file - say .png.

I.A.2) administrator draws vectors on top of rotated&scaled .png in JOSM, adding vectors necessary for indoor-geopositioning

administrator creates map from .dxf => .osm

I.B.1) administrator takes .dxf file from architect, takes dxf2osm tool, obtains .osm file.

I.B.2) administrator opens .osm file in JOSM and rotates/scales stuff, adding vectors necessary for indoor-geopositioning

administrator uploads/fetches .osm map

II.1) Administrator uploads map vector .osm diff to server.

2nd scenario : End-user uses device to browse map & interact with location-based services (LBS)

user browses indoor/outdoor maps & dis/enables indoor objects

I. user browses outdoor map à la google maps (un/zoom, pan). user can see indoor area (eg. buildings)'s outer bounds/contours with simple fill.

II. user reads list of indoor-enabled places in the area (ie. maps having indoor precision, and optionally geopositioning), enables showing for one or more of them, sees indoor mapping (typically vectors) overlayed on top of indoor area's outer bounds.

user uses location-based services

III.A. user sees available services/tools buttons for each indoor area he/she is viewing and can click/run them (eg. if area is hospital, "phone" icon button shows up on a screen handside and clicking on it triggers a phone call to the hospital telephone switchboard)

III.B. user sees vector items that are clickable and click them to see & run associated services

3rd scenario : Administrator administers the server

I. administrator connects to a server admin interface (eg. in web browser)

II.A. administrator views all created indoor areas for this server and can filter view : per-city / administrative boundary, per-building, per-level, and text-search for items

II.B. administrator changes map style, un/publishes indoor map areas

II.C. administrator sees/tweaks settings/enable/disables/installs/remove per-server, per-indoor area or per-object location-based modules

ZOO-project module scenarios

For the 1st scenario

- an OSM API module (or some "TransparentService/URLInformer" service template instance named OSM) : which transparently allows in/out from clients to the installed Rails port OSM v0.6 API. OGC's GetCapabilities showing the OSM API module would give the http://URL of the Rails port api

For 2nd scenario

- KML service: a KML (thus likely, WFS) module with filtering support (eg. give me buildingA's level1's KML showing only chairs (keeping walls & stairs though)) or why not a chained WPS service possibly named "OSM output-converter" which calls OSM with filter settings and sends .osm-equivalent KML to client

location-based services

we basically want to be able to get capabilities/available services for an area/object, then get details on a specific service appliable to the latter area/object, then run this service either on server-side, client-side or both of them.

- per-object capabilities a sort of GetLocationCapabilities(typeOfId,Id) returning info on other services to contact... both indoor & outdoor GIS developers would interested in such a module. This basically returns a list of ready to run callbacks : ie. REST like : GetServiceDetails/typeOfId/Id/ (see below)

- per-object per-service details: a GetLocationServiceDetails(typeOfId,id,actionType) module which returns an xml description helping client device to run actionType linked to typeOfId(=node,way or relation) #Id. per-object-service execution detail : optional (if service leads to a server-side action instead or in addition to a client side only action)

- Service running modules (WPS): a RunLocationService(typeOfId,id,actionType,actionParams..) module

Geopard aims at providing an open source indoor mapping & indoor (at least) wifi geopositioning kit, with 3 software deliverables : - map viewers on computer & mobile devices, - map server - map editor to manager the server's contents

We have 2 development milestones in mind : - Firstly, have a well-packaged OSM implementation of the 3 software deliverables (this means at least JOSM+indoor pluging, .osm file format, TMS and Rails port vector I/O webservice, J2ME/MIDP mobile application) - Later, have a well-package <something> with OGC web interface implementation.

I have taken a look at what Absysseo does ( ), and the ZOO-kernel + some Geopard modules could really stand as a sort of open source Absysseo Development Kit clone ( > ADK ), enabling third-party developers to add new location-based services adapting Geopard to their needs.

Developing Geopard

We have little published code for now (working in a Dropbox). On Geopard Project Space's Bazaar repository, you will find:

  • an ubuntu 8.04 server deployment script which needs to be cleaned up and split into smaller scripts making up modules for a bigger installation script.


For now, the contributors behind this project are a team of 6 students at [ ECE Paris university] from France.

Other Projects