Version 31 (modified by Fran Boon, 13 years ago) ( diff )


Location Selector

We want a widget which can be embedded within a form to be able to select the appropriate location to associate with a record using either hierarchical dropdowns or a precise location.


We have a widget in modules/s3/ and static/scripts/S3/s3.locationselector.widget.js

This supports:

  • Hierarchical Level selector to choose the correct level or select the correct Parent
    • The country selector remains hidden if there is only 1 country being used (as per deployment_settings).
    • The number of levels available depends on the deployment_settings.
    • Initially just a single dropdown is displayed.
    • When this dropdown is selected then the next dropdown is displayed, along with appropriate values
      • We download the values via AJAX in order to not have to download all Locations
  • The user has the option of adding a more specific Name & a Street Address
    • This is not mandatory as some records need to link directly to the L0-L4 levels.
      • Assessments
      • Projects (even some Activities)
    • New locations have their name automatically set from that of the Record, if no other name is provided (still?)
  • Map-based lookup of Lat/Lon
  • Manual entry of of Lat/Lon (either from a GPS or looked up in an online resource like Wikipedia)
    • A Conversion tool is available to convert from Deg/Min/Sec to Decimal Degrees

Use Cases

Locate a Site


  • Select an Existing Building
  • Create a New Building
    • Enter the Address & use a Geocoder to open a focussed map view to allow precise selection of Lat/Lon
    • Enter the Address & open a map view to allow precise selection of Lat/Lon
    • Enter the Address & Lat/Lon manually
  • Create a New Location Group
    • Workflow should do this as easily as possible rather than having to manually create the Group & then Create New Building(s) within Group
    • Have a checkbox within form 'Multiple Locations' which creates the Location Group (with the same Name as the Site + 'Group')
    • The 1st Building is created in the normal way & added to this group
    • Q: How do we add subsequent buildings? (Lower priority for now)

Locate a Person

Link them to a Site

  • Set a Staff member's Base Location to their Office Address
  • Check-in to a site

Both would want to select Site from a Dropdown (ideally Combobox)

Select their Home Address

  • Set a Volunteer's Base Location to their Home Address

Like Locate a Site

Provide a WayPoint

Update Presence by

  • Lat/Lon entry (e.g. automated)

Locate an Activity

or other Misc Location which isn't a Site & may not be a Building



  • Redesign the Look/Feel to make it more usable
    • Ensure that Sites *always* have a specific location
      • This location should be the Building (which can be shared by multiple sites) or a Location Group (Site spread over several Buildings)
        • Ensure that Name field is labelled as Building Name unless a Group is being used
    • Presence records or misc locations don't need a Name at all (optional)
    • Display all the Lx layer dropdowns from the start?
    • Q: Should we save a new location automatically upon submission of main form (as now) or else have a manual Save button?
    • Q: Is 'Specific Location' == L5?
  • Add an HTML5 GeoLocation option ('Current Location')
    • we should use a 'nearby' algorithm (like gis.get_features_in_radius()) to re-use existing locations rather than adding a new one each time.
    • e.g. pr/person/presence could be recorded automatically upon login
    • display the results on a map for visual confirmation that the correct result has been returned
  • Set the map entry default !lat/lon/zoom based on the selected Level in the Hierarchy (assumes we have at least Centroid information available, ideally use Polygons where we have them)
  • Geocoder lookup of a Street Address
    • port some code from old Selector
    • Display the geocoder results on a map for visual confirmation that the correct result has been returned
      • Use this for UI example:
    • Use more back-end Geocoders than just Google
  • If we have admin boundaries available then the Lat/Lon provided can be validated against the selected Lat/Lon
  • If we have admin boundaries available then the correct hierarchy can be filled-in automatically if just the Lat/Lon are provided
  • Experiment with downloading all Locations at startup (into a jQuery Data store) & filtering client-side, or maybe downloading just the full next level of hierarchy proactively (e.g. we've got the L0 selected, we have the L1 dropdown populated accordingly...we could download *all* L2s within the L0 ready for when the L1 is selected & then filter the downloaded L2 data to those within the relevant L1 to populate the L2 dropdown with). This would also provide an automatic cache (within the page only).
  • Extend the location_id() API to support controlling which levels of hierarchy we're interested in for a resource (some may be only interested in the province, whereas others may need a precise location)
  • Make the gis/location/create form reuse as much of this UI paradigm as possible (although the focus for that screen will be adding the Admin Hierarchy)
  • Implement ideas from BluePrintResourceSelectAdd

Known Issues

There are various bugs in the current implementation, some of which are listed below.

Duplication of location records

This happens when you for example create a new hospital record without creating a new location, but just selecting one (just select a country, for example). When you submit, then a new location record is created with the same name as the selected one - this seems wrong. You can make it visible by uncommenting the show_status line. The reason for this behaviour is that S3.gis.uuid is empty in case there is no old_location, which triggers the creation of a new record. Thus, this does not happen in update, and not either when you create a new location (which creates a new location anyway :D).



GIS BluePrints

Attachments (2)

Download all attachments as: .zip

Note: See TracWiki for help on using the wiki.