There's a verity of available services, but it can be difficult to see where they are, or visualize them. Rather than build a bunch of silo'd apps, I wanted to use the power of GIS to help people see location-based information.

I think there's a gap between the current solutions that this project can fill.

  • Today's general-purpose map-based services (EG, Google Maps) are awesome at unstructured queries. But their general-purpose nature makes it difficult for them to filter well: search for "farmers' markets" will often turn up groceries and restaurants, for example. And they don't visualize: you can't get a choropleth map of school district performace.

  • Full GIS systems use individual layers to structure data, and they have great visualization capabilities. But they are traditionally harder to use, or behind a firewall.

  • Some location-based data isn't in map form at all. For example, the CA department of education will share test scores, but it's a spreadsheet, so it's not easy to see how your school compares to its nearest neighbors.

What it does

It's a platform to enable viewing GeoJSON layers. Since point data is often in spreadsheet form, a related development project is tooling to create a GeoJSON (point) layer from a spreadsheet. (See "CSVToGeo" on github.)

I've deliberately made it as decoupled as possible, so that collaborators can easily add layers and specify visualization without any coding.

How I built it

I wanted to do everything in JavaScript, so it can run entirely on browser. This lets it automatically work for desktops, and work mobile phones right out the gate (via browser). A pure JavaScript application also makes it possible to create native iOS and Android apps via the Cordova framework, if demand builds enough to make 'native' apps worthwhile.

I'm using Leaflet for the mapping, D3 for the visualization. Templates are in Handlebars.

Challenges I ran into

There are several open source libraries for drawing maps, as well as ArcGIS, and I needed to investigate them to pick the best, which I think is Leaflet, plus D3 for visualization.

Data sets are a challenge, too. It's great to imagine a map that would let you enter your grocery list and then show you which grocery store minimizes the cost of food + gas + time... but if you can't get the data, you're stuck. So from necessity, some of the data sets are much less snazzy than ideal.

But the point at this stage is the platform, not the data: I need enough data to show what's possible, and motivate the public to tell me what other data sets are of interest. The de-coupled nature of the platform will make it easy to add layers, if the data can be found.

Accomplishments that I'm proud of

I'm happy with how de-coupled the map layers are, and how easy it is to add more data. Adding a layer requires no more than editing a spreadsheet to add a line for the layer. Layer name, URL to the data, the filename of the template for the layer's popups, and what should be visualized --- there is no code to change, not even any HTML (aside from the layer's popup, if it has one).

This will make it easy to scale the project up by scaling out: people working on different layers cannot get in each others' way.

What I learned

ArcGIS Leaflet plugin means I can draw maps from an ArcGIS server or ArcGIS online. Given the dominant position of ArcGIS and how many layers are already available in a city or county ArcGIS server, that's awesome.

What's next for Service Locator

  • Fix some bugs!
  • User survey for what data is of most interest / hardest to find elsewhere.
  • More data layers, based on user survey
  • Translations into other languages (Español,中文) for non-native-English speakers
Share this project: