- How much data?
- Just enough
- Lots of points, and each point has data that you want to be able to explore. For instance, apartment listings which might number 10 per city block, but you want to be able to click on them and see photos and links.
- Cluster your points with Leaflet.markercluster
- Too much and the points have some value that can be aggregated
- Create hexbins of your points with the QGIS hexbin plugin, to make polygons. Start again at Polygons
- Too much and the points just represent presence - like tweets
- Create a heatmap with Leaflet.heat or QGIS heatmap plugin. If you use QGIS heatmap, start again at Raster.
- Tons of data, and you don't need labels? Use tippecanoe.
- How much data?
- Just enough
- Convert the data to GeoJSON & make a simple Leaflet map
- Too much, the polygons have necessary detail
- Use Mapbox Studio.
- Use GeoServer with WMS layers and GetFeatureInfo
- Too much, the polygons have unnecessary details or many of the polygons have shared borders, like state or province maps
- Just enough
- What kind of attributes?
- Absolute numbers
- Convert the points to centroids with QGIS and start from Points
- Normalize absolutes to rates by dividing over polygon area, and start from Rates
- Rates or Categories
- Make a choropleth map with Leaflet for small data, Mapbox Studio for big data
- Temporal data - values over time
- If there are fewer than 100 samples - like 50 years of data grouped by year, make small multiples: a map per sample.
- If you can code, make an animation with Leaflet or d3.js
- If it's tons of data, use CartoDB and torque
- Multivariate data: like counts of different species or ethnicities
- Make a dot density map with englewood
- Names of places, like countries
- With IDs:
- ISO2 or ISO3 codes
- Download Natural Earth data at the right level, join with QGIS, and start again at Polygons
- ZIP codes
- Download ZCTAs and join
- ISO2 or ISO3 codes
- Without IDs
- Find data with IDs, or manually join with polygons
- With IDs:
- Addresses
- You can't map addresses directly. Geocode them with OpenRefine or Geo for Google Docs, and then start at Points
- Other Geocoding options:
- US: US Census
- Canada: Geogratis
- OpenStreetMap: Nominatim
- Data Science Toolkit can be useful for local bulk geocoding that would be too much for a hosted service.
- geocoding libraries
- node - node geocoder
- Perl - Geo::Coder::Many
- PHP - Geocoder PHP
- Python - geopy
- Ruby - Ruby Geocoder
- Absolute numbers
- Small amounts of data: use Leaflet
- Lots of data, or need line labels (are they streets?)? Use Mapbox Studio
- Tons of data, and you don't need line labels? Use datamaps.
- Already georectified & cleaned (from satellites or fixed-up sources)
- If you want to host it yourself
- Render tiles with MapTiler, publish them on S3 or some other service, view them in Leaflet
- If you want someone else to host & process
- Upload to Mapbox and view in Mapbox GL JS or any client
- Read processing satellite imagery to understand GDAL/ImageMagick workflow.
- If you want to host it yourself
- Raster images from drones
- Raster images from scanned maps
- Use MapKnitter to georeference and georectify
- Install GDAL and use ogr2ogr to convert the file. If you can't install this, you can use it online with Ogre
- Commercial tools:
- Ask your source for a better file format
- I want raw data right from the source, up to the minute, in its original form? planet.osm
- Drawbacks: downloads are very large and require specialized tools to process
- I want raw data for subsets of the world: Geofabrik extracts or Mapzen metro extracts
- Drawbacks: only includes predefined areas, not as up-to-date as Planet.osm
- I want data useful for fast basemaps, already processed into vector tiles: Mapbox
- Drawbacks: doesn't include all features or all tags on features, only those appropriate for visualization
- I want raw data as tiles, which include more data and complete tags: OSM QA Tiles
- Drawbacks: much larger & slower than tiles designed for visualization
- I want a specific subset of data by area, filter, and want the newest data possible: Overpass
- Drawbacks: can't return country-sized chunks of data, only smaller subsets
- I want filtered, up-to-date extracts in extra formats like KMZ, Garmin Image, etc: HOT Export Tool
- Drawbacks: can't do arbitrary regions
- Government Data
- Contact the town or federal GIS dept you need
- Use FOIAMachine.org to request data via FOIA
- Personal Data
- If you want to create data, use geojson.io and draw it.
- Global Data
- For basic data like countries, cities, use naturalearthdata.com
- Historical Data
- NYPL MapWarper for historical, scanned (raster) maps
- Greek & Roman: Pleiades
- Projection:
- If it's a web map with tiles, use Spherical Mercator. This is the default for Leaflet, Mapbox GL JS, and most other clients.
- If using d3 and not using tiles anywhere, use whatever fits best. Bonus projections are in d3-geo-projection.
- If it's a map of America, use the Albers projection
- If it's a map of a pole, use an Azimuthal equidistant projection
- Have a projection and not sure what it is? Use epsg.io.
- Colors:
- When in doubt, use ColorBrewer
- Want to know more? Read Subtleties of Color
- Scales:
- For any data
- Try linear first
- Then quantile
- For data of rates or compounding values
- Try log and power scales
- For any data
- Points:
- Start with normal circles with no strokes
- Scale points by area, not diameter
- Flair:
- Only add a north arrow if north isn't up
- There are few cases where north shouldn't be up: for instance, Montreal, Canada is often mapped at an angle.
- Always attribute your data, especially OpenStreetMap, to avoid the nerd wrath
- If it zooms, add visible zoom controls. Pan isn't necessary, but not everyone has a scroll wheel / multitouch
- Only add a north arrow if north isn't up