Version 43 (modified by Fran Boon, 14 years ago) ( diff )

Client-side filtering of Layers

Feature Layers

  • A 'Feature' is a Resource Record which has a Lat/Lon available.
  • Features can be Points, Lines or Polygons
  • Features can be added to the Map
    • A Feature Layer is a collection of Features for displaying on the Map or for exporting as a feed
      • Resource
      • Filtered
        • Resource.Category (Report/Incident table, Missing Persons, L0->L3 in gis_location table)
      • Collection of Resources <- is this required?
        • feature_layer can have a query on new gis_landmark table which pulls in categories Port/Airport/Railway
  • Features can be removed from the map or moved on the map interactively.
    • To do this via a single set of Controls means having a single Vector Layer (or having to manually select the active layer!).
      • Build up this Vector Layer from multiple Feature Layers
      • In order to be able to dynamically enable/disable individual Feature Layers whilst viewing the map, we need to write a custom layer switcher which refreshes the whole Features Layer client-side upon changes.
  • Feature Layers can be filtered interactively without a server-side call to rebuild the map.
    • Need the original Feature_Layer to contain the attribute which we want to be able to filter on. Can then use our custom layer Switcher to apply the Filter.
  • User can define which layers should be selectable/enabled-by-default in the Situation Mapping layer switcher.
    • This list is personalisable.
      • move from layer definitions to gis_config
        • Have 1->M for Feature_Layers for available.
        • Attribute of visible stored in a separate multiple field.
          • Combine with special widget?
  • Features can be exported in KML/GeoRSS/GPX/etc
    • Need to update S3XRC for GPS symbol detection when FeatureClass allocation changes
    • Need to update gis.get_marker() when FeatureClass allocation changes


A Marker is an image used to represent a Feature on the map.

The Marker used will be:

  1. Cluster marker if multiple markers close together
    • styled by size & include the # inside (when >2)
    • prevents performance issues as well as making things clearer
  2. The Feature marker (if defined)
    • Q: Is this required?
      • Removing it will make for a more consistent User Interface as the symbology can be trusted
      • Removing it will speed things up the operation of gis.get_marker()
    • Q: If kept, should we provide an option to allow the FeatureClass icon to over-ride individual Feature Icons?
  3. The FeatureClass marker (if defined)
    • Styling based on values of an attribute of the resource
      • add new gis.thematic_map table
        • fields
          • value_low
          • value_high
          • marker_id
      • add field, thematic_map_id (multiple=True) to the gis.feature_class table
      • Q: This is for display in specialist report views only? (not main Situation Mapping)
      • Q: Is variable markers sufficient? Would size/colour of basic vectors be better?
      • once we have core functionality, want UI to be able to choose the attribute, the values & the markers
  4. The Default marker

Markers BluePrint


Clicking a Feature should bring up a Popup

  • This can be a URL to load (flexible, but slow)
    • define the URL in FeatureClass? FeatureGroup?
    • Future: allow inserting a per-feature popup_url into the query before passing into API, e.g.
      features_query = db(query).select()
      for feature in features_query:
         feature.popup_url = URL(r=request, c="vol", f="vol") + "%(location_id)s"
      • Support string substitution like %(location_id)s
        • the onFeatureSelect control is per-layer not per-feature & so feature-specific aspects need to be evaluated client-side in Javascript.
  • If not provided, the default is:
    • Loaded into the map during main load: no server-side calls
    • Header should be found from a set of common options (name/code)
      • How to do this with JOINed queries?
    • All the list_fields with their labels
    • A link to open the record in a new tab

Clicking a Cluster should bring up a Popup

  • a list of the features within the cluster
    • each list item is hyperlinked to bring up the Feature's Popup (as well?)

Q: Provide option to add Labels to Features?


Option A (preferred)

Hardcode the link between FeatureClass & Resource (with optional category, e.g. for 'Report/Incident' table)

  • Add optional category_field/category_value columns to the feature_class table
  • If wanting feature-specific markers then add marker_id to resource tables (by bundling with location_id)
  • Replace feature_group table with feature_layer table
    • fields:
      • name
      • resource (used to populate the query field via an 'onvalidation')
      • filter_field (optional. used to populate the query field via an 'onvalidation')
      • filter_value (optional. used to populate the query field via an 'onvalidation')
      • query (hidden behind 'Advanced' button?)
      • marker_id (optional: over-ride all markers for this query)
      • comments

Option B

FeatureClass is an attribute of the link table

  • location_id extended to include feature_class_id (& marker_id) fields
  • => a Feature Group cannot be a collection of Feature Classes since we can't trawl through all resources to see if any of them have been tagged for this FC






GIS BluePrints

Note: See TracWiki for help on using the wiki.