The GEOvoter API

The GEOvoter API provides location services for Americans to gather online to help their representative understand what policies to support. This listing presents the specific services described generally by British journalist Simon Carroll in Democracy disrupted: We need a new politics that’s open source and crowd sourced. The GEOvoter API puts constituent's issue hashtags on politicians' jurisdiction maps. Like Google’s link-weighted algorithm, the GEOvoter API upvotes relevance so politicians can start to see what issues are important to people not on cable news, the ones who have brains, ideas and persistence.
  1. GEOvoter.io: Place social media on politicians’ maps, capture metadata & offer drill down.
  2. Demo Map: A double click instantly lists any US location’s 6-7 political jurisdictions.
  3. Zip code or Lat-Long Demo: Zip code or Lat-Long instantly lists any US location’s 6-7 political jurisdictions.
  4. PowerZone REST call: 61 lines of code that return 6-7 political jurisdictions.
  5. GEOvoter API Data Types: 12 Twitter native + 21 derived from NewGov
  6. GEOvoter API: 18-Step Notification Cascade to politicians, media and a voter's social networks.
  7. Virtual Marches on DC : Present a dynamic map of marchers, virtual and meatspace, in solidarity.



1.  GEOvoter.io is working. try it.
Place social media on politicians’ maps, capture metadata & drill down.
The service captures social media issue hashtags and depicts them on politicians’ jurisdiction maps, displaying metadata & offers options to drill down. This 2014 proof of concept can be available for service for new issue hashtags within a week.

          Tweets displayed on Congressional districts.

2.  Demo Map (
try it): A double-click instantly lists any US location’s 6-7 political jurisdictions.
NYC example: If I live over the Spotted Pig on W 11th Street, what are my jurisdictions?

Your Power Zone hashtag tells your politicians you matter:
                      #PZNY102766-51000,3*

State: New York
County: New York
U.S. Congressional District:
NY 10
State Senate:
District 27
State Assembly: District 66
City or Town: New York
City or Town Council District: District 03
Unified School District: New York City Department Of Education



*The representative for the 66th NY State assembly district is affected
..when social media tags start with "#PZNY" & chars 10 & 11 = "66".
PowerZone name space taxonomy.


3.  Zip/Lat-Long Demo
(try it): Zip code or Lat-Long instantly lists any US location’s 6-7 political jurisdictions:

Using FireFox, your temporary IP number approximates your location.

   
4.  PowerZone REST call: 61 lines of code that return 6-7 political jurisdictions:
  1.               locator = new esri.tasks.Locator("http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer");
  2.               dojo.connect(locator, "onAddressToLocationsComplete", gcResult);         
  3.               zipQueryTask = new esri.tasks.QueryTask("http://services.arcgis.com/P3ePLMYs2RVChkJx/arcgis/rest/services/USA_ZIP_Codes_2014/FeatureServer/0");
  4.               zipQuery = new esri.tasks.Query();
  5.               zipQuery.returnGeometry = true;
  6.               zipQuery.outFields = ["ZIP"]
  7.               powerzone_svc = "https://data.digitaldataservices.com/arcgis/rest/services/NGOV/us/MapServer"; 
  8.               identifyTask = new esri.tasks.IdentifyTask(powerzone_svc);
  9.               identifyParams = new esri.tasks.IdentifyParameters();
  10.               identifyParams.tolerance = 0;
  11.               identifyParams.returnGeometry = false;
  12.               identifyParams.layerIds = [0,1,2,3,4,5,6,7,8];
  13.               identifyParams.layerOption = esri.tasks.IdentifyParameters.LAYER_OPTION_ALL;
  14.             function enter_addy(){
  15.               var _add = dojo.byId('addy_input').value;       
  16.               if(_add == "[number][street]"){
  17.                   alert("Please type in an address in the format:\n'123 Main'");
  18.               }
  19.               else{           
  20.                 var single = dojo.byId('addy_input').value + " " + qs_zip;
  21.                   var address = {
  22.                    SingleLine: single
  23.                 };
  24.                 var options = {
  25.                   address: address,
  26.                   outFields: ["*"]
  27.                 };
  28.                 locator.addressToLocations(options);
  29.               }
  30.             } 
  31.             function gcResult(candidates) {
  32.                 if (candidates.length > 0){
  33.                   var us_x = candidates[0].location.x; ///USE THE FIRST HIT
  34.                   var us_y = candidates[0].location.y; ///USE THE FIRST HIT
  35.                   if(us_x < -64 && us_x > -180 && us_y > 20 && us_y < 72){
  36.                   var points = new esri.geometry.Multipoint(map.spatialReference);
  37.                   var wmp = esri.geometry.geographicToWebMercator(points);
  38.                       passIdentify(wmp);
  39.                   }
  40.                     else{
  41.                       alert("Address and zipcode not locatable in US.");
  42.                     }   
  43.                 }
  44.                   else{
  45.                     alert("Address and zipcode not locatable.\nMissing Geocode Address Handler.");
  46.                   }   
  47.               }
  48.             function passIdentify(point_wm) {
  49.               identifyParams.geometry = point_wm;
  50.               identifyParams.mapExtent = map.extent;
  51.               identifyTask.execute(identifyParams, function(idResults) { setContent(idResults); });
  52.             }
  53.             function setContent(idResults) {
  54.                 else if (idResult.layerId === 8) { /// LAYER 8 IS THE POWER ZONE POLYGON!!
  55.                   if (!unioResults.displayFieldName) {
  56.                       unioResults.displayFieldName = idResult.displayFieldName;
  57.                       unioResults.features.push(idResult.feature);
  58.                       content = unioResults.features[0]; //take the first one, hit #0
  59.                     });
  60.                   }
  61.                 }             

5.  GEOvoter API's 14 Twitter + 17 derived NewGov data types.
A PowerZone location code has no personally identifiable information, so a social network's members run no risk in sharing theirs (on average, there are 655 people per code). The upside: our representatives can detect what we've been saying, but can no longer pretend we're not. Issue advocates can publicize our constituent power so publicly and persistently that they we can finally drive policy.
  1. Twitter UID
  2. Date
  3. Time GMT
  4. Time local
  5. Time zone
  6. User name or Handle
  7. NewGov Member?                                               
  8. NewGov SuperVoter?                                          
  9. Tweet string
  10. Lat-Long
  11. *voteUS Hashtag(s)  1 . . . n                                  #FemVoteUS, #STEMVoteUS, #IMMvoteUS, etc.
  12. @handle 1 . . . n                                                    All addressee(s) on DMs, RTs, etc.
  13. Retweet ID 1     . . . n                                            All RT Twitter Record number(s)
  14. Image
  15. ZIP code
  16. State
  17. State Code
  18. US Congressional District
  19. US Congressional District NewGov Code
  20. County
  21. County Code
  22. State Upper House
  23. State Upper House Code
  24. State Lower House
  25. State Lower House Code
  26. City
  27. Ward
  28. Date of User's first use of targeted hashtag
  29. Is votepledged at NewGov.US?                            Y-N
  30. Date of User's first use of #votepledged hashtag
  31. Tweeter's total uses of targeted hashtags
6.  GEOvoter API 18 Step Notification Cascade
When social media originates from a representative's jurisdiction, putting it on the political map can be the first of many consequential alerts and services. It's like Software as a Service, but Influence as a Service (IaaS), a Politician Notification Cascade: A series of signals published to Reps and their staffs and archived publicly and continuously.
  1. Place an interactive icon on a politician’s district map, as at GEOvoter.io, section 1, above.
  2. Archive the map and its build history so the events stay public
  3. Reward the social media author (constituent)
  4. Send a fax to the politician’s offices using an email-to-fax service.
  5. Introduce the constituent to her Rep
  6. (US) Send a web form message to the politician using the email-to-webform API
  7. Stylized text, charts & graphs formatted for media consumption. Needs formatting
  8. Alert issue-based NGOs
  9. Post links to advocacy pages & videos.
  10. Generate a press release.
  11. Place an article in local and national papers and online.
  12. Fund a donation to an NGO on behalf of the user.
  13. Fund a donation to the politician(s) from a PAC.
  14. Schedule events using the Meetup API
  15. Optionally organize simultaneous Meetups in the district and the capitol
  16. Skype, Zoom or WebRTC the Meetups so the DC & District groups form a colloquium.
  17. Depict and publicize each user's cascade with rich text & graphics, online and as PDFs.
  18. Publicize the cascade archive’s scope and trends.

7.  Virtual Marches on DC - Progress & Visuals

Your phone easily shows you the turns & times for an imaginary trip to the office (all trips are imaginary until you start).
The GEOvoter API easily creates travel progress on a virtual journey so, if a group wants to support their neighbors marching on DC, their participation can look and feel like the real-world journey.