Volunteered Geographic Information (VGI) is spatial information collected by members of the public through crowd-sourcing. VGI apps allow for geo-located information to be collected at an extremely high temporal resolution, with a high degree of complexity, depending on the nature of the phenomena being recorded.
For this lab we were to:
Create domains and subtypes for enterprise geodatabase features
Prepare a feature template
Create feature editing services
Develop a simple VGI interface using the ArcGIS API for JavaScript
Verify the integrity of the data collected with the app
Methods:
The first step of this process was to create domains and subtypes for the new features. The features were: fire hydrants, sidewalks, and green spaces. For the fire hydrants, I created a coded value domain "fire hydrant" with values for the colors red and yellow. For sidewalks, I created a coded value domain "condition" with values for "very good" and "needs repair". For green spaces, I created a coded value domain "health" with values for "lush" and "needs fixing".
Next, I created feature templates for the new features. Each template was created using the Web Mercator projection. Each feature was set to use its newly created coded value domain, and also to have a "comments" field where up to 80 characters of text may be entered. After each feature class was created, I set their symbologies and calibrated them to allow for the attachment of images.
After the feature classes were all set-up, I shared the map as a service to ArcGIS Server. I published the service with "feature access" enabled, as it will allow end users to perform editing over the web.
In order to create the app, I first created an HTML page with mobile responsive tags (Figure 1).
| Figure 1: Mobile tags. |
Next, I created a stylesheet with specific settings for: the body, the template picker pane, the panel header, the map, the editor template picker, and the info window (Figure 2).
| Figure 2: CSS tags. |
I then coded the behavior of the VGI app with JavaScript. First, I imported modules from Esri and Dojo and used the parse function to execute the dijits. I then wrote code to enable snapping, by utilizing a geometry service from Esri. Next, I created the map, and assigned my feature templates to the map. After assigning the feature templates to the map, I called the method to add the layers to the map, resize the info window, and create an event function to listen for interactions the end-users will be making with the VGI app.
Results:
The image below is from my finished VGI application (Figure 3).
| Figure 1: The app running on Desktop. |
Although, the VGI app worked well in a desktop environment, It really suffered when in a mobile environment (Figure 4).
![]() |
| Figure 4: How the app appeared on mobile. |
In order to compensate for these drawbacks, I added some responsive elements to show or hide the template picker on the request of the end-user (Figures 5,6).
![]() |
| Figure 5: The button in the lower right controls whether the template picker is shown or hidden. |
![]() |
| Figure 6: When the template picker is shown, the zoom widget slides with it, so it is still accessible to the end-user. |
Conclusions:
VGI apps are extremely useful, and are actually quite easy to create when given the proper tools. Apps must be calibrated to work in a mobile environment, if intended to be used in a mobile environment, otherwise they'll never get used.
Sources:
Red fire hydrant picture was obtained from www.dreamstime.com
Esri Geometry service: "http://tasks.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer"







