Version 17 (modified by 15 years ago) ( diff ) | ,
---|
GIS API
Developers need to be able to embed maps within their Modules & display Features.
They don't want to have to become GIS experts for this - they just want to be able to call a documented mapping API:
- A function which returns all the HTML needed to insert a map on the page, with the following customizations:
- Be able to define which locations get placed on this map. This might include a number of different types (groups?) of locations. For each type/group we can specify:
- The Marker (default from gis module).
- A function to call to return the size/colour of the marker, based on the location id. (advanced)
- A form which get displayed as the pop-up for the markers (along with the location_id as a arg/var, so can customize the display)
- Be able to define the default size of the map
- Be able to define which locations get placed on this map. This might include a number of different types (groups?) of locations. For each type/group we can specify:
- It would be good to be able to pass additional layers (or turn current layers off) to the map via JS, so that the map can be controlled dynamically using external controls. Although this probably represents a great deal of complexity and may need to be reconsidered.
We can pass information in 3 different ways:
- Argument
- Global variable (e.g. request.s3.gis_*) <- Not Advised
- Config in Database <- Not efficient
gis.read_config()
Here is the API from the original PHP version:
This is the current API used by the FRP application:
http://127.0.0.1:8000/frp/gis/map_viewing_client? kml_name=Programmes& kml_feed=http://127.0.0.1:8000/frp/or/programme/report.kml? from=2010-04-23& until=2010-04-23& mode=programme
The pr/person/presence includes a link to embedding a map within a page:
<a onclick="viewMapMulti('{{=request.controller}}','{{=request.function}}',{{=request.args[0]}},'{{=request.args[1]}}');return false" href="#">View All on Map</a>
MapFish have an API in JavaScript to allow their apps to be embedded in CMSs:
Proposed API
Early draft!
Embed a map within a Page
gis.show_map( internal_overlays = None, internal_layertree = True, external_overlays = False external_layertree = True, toolbar = False, height = <default>, width = <default>, lat = <default>, lon = <default>, zoom = <default>, base_layers = <default> ) """ internal_overlays - list of dictionaries: { db.gis_feature_group.name, filter = None, # A query to limit which features from the feature group are loaded active = True, # Is the feed displayed upon load or needs ticking to load afterwards? popup_url = <default>, # The URL which will be used to fill the pop-up. it will be appended by the Location ID. marker = <default> # The icon used to display the feature. Can be a lambda to vary icon (size/colour) based on attribute levels. } internal_layertree - bool - whether or not to display the menu to turn on and off the internal_layers external_overlays - bool - whether or not to display the overlays enabled in the Map Service Catalogue [- list of ints - The external overlays (WMS/KML/GeoRSS/etc) to display on the map. Hard-coding this is Ugly! Can we not just make it Bool & use Map Service Catalogue for more control?] external_layertree - bool - whether or not to display the menu to turn on and off the external_layers toolbar - bool - whether or not to display the toolbar height - int - height of map in pixels width - int - width of map in pixels lat - double - Initial map center point lon - double - Initial map center point zoom - int - the initial zoom level of the map base_layers - list of ints - base layers used for map. Hard-coding this is Ugly! Can we not just use Map Service Catalogue for this? Maybe creating separate configurations for separate use-cases, so can call e.g. db.gis_config.3 instead of the default Will return the HTML to embed a map with the specified options. """
Note:
See TracWiki
for help on using the wiki.