Crater Lake National Park


Digital maps for the National Park Service

New Version of State Page Maps Released

Posted on 11 Jun 2014 by David Warren

Viewing Program Locations in Rocky Mountain National Park, Colorado

We just released a new version of the state page maps for each of the state pages. These maps are intended to demonstrate the breadth of the impact the National Park Service has on communities across America. They include National Parks as well as locations from various NPS programs like the National Register of Historic Places, Federal Lands to Parks, the Rivers, Trails, and Conservation Assistance Program, and more.

Park Tiles

The previous version of the state page maps used out-of-the-box Bing tiles. The maps now use our custom basemap, Park Tiles. The design of Park Tiles pushes National Park unit boundaries and program locations to the forefront of the map.

About the Technology

NPMap.js is built on top of Leaflet and uses the Leaflet.markercluster plugin internally to support marker clustering. This makes it possible to display the more than 100,000+ program locations across the country while maintaining good performance across all platforms and browsers.

The point data for each of the maps is stored and served directly from GitHub using GitHub Pages.

Take a Look

You can access the state pages directly from the home page. Simply select a state from the dropdown at the top right-hand corner of the page.

Introducing Places

Posted on 04 Jun 2014 by Jim McAndrew

Editing Points of Interest in Great Smoky Mountains National Park

The National Park Service manages 401 special places across America, ranging from small cultural parks to some of the world's most iconic natural parks. Unfortunately, under the traditional GIS paradigm many of these parks don't have the resources to develop or maintain their own geographic information. The Places project aims to address this problem by making it easy for non-technical Park Service employees to contribute their own information and local knowledge through an easy-to-use web interface.

Data collected through Places is rendered in our Park Tiles basemap, which is used on many National Park Service web pages and will soon be used by Park iOS and Android apps built on top of the Places Mobile app framework. Data from Places can also be accessed by developers and other systems through a set of REST-based web services.

Our goal is to refresh Park Tiles with changes/additions made in Places on a daily basis, although this refresh is currently a manual process.

Built on OpenStreetMap

As demonstrated by the user stats, the OpenStreetMap project has done a tremendous job building tools that make mapping more accessible to everyone - including those who have no previous experience creating or maintaining geospatial data. Places is built on these same tools, allowing us to take advantage of the hard work done by the OpenStreetMap community as well as contribute resources back.

Existing OpenStreetMap users will recognize the tagging style and the Places Editor itself, which is a slightly-customized version of iD. New users will be able to get up-and-running quickly, allowing them to contribute their knowledge to the map.


This initial release is limited to the National Park Service's Points of Interest dataset. The editor includes presets and icons for the Harpers Ferry Center map symbols.

We intentionally limited the scope of this release to give us some time to incrementally build out the internal system architecture. We will, however, soon add support for buildings, roads, trails, and other "core" data themes.

Integration with GIS

We see the Places system as being a good complement to, and not a replacement for, the National Park Service's GIS program. To that end, we are working on ways to more tighly integrate Places with our internal GIS. We also plan on automating the upload of "GIS-friendly" datasets to the National Park Service's Data Store, where they can be downloaded by NPS employees and members of the public.

Getting Started

Places is only available to those who can access the National Park Service network. NPS employees, partners, and volunteers can access the Places Editor at The first time you start editing, you will be given the option to run through a demo. You can also walk through a Getting Started tutorial and find out more about the system on the project wiki.

You can also jump directly into editing Places (and OpenStreetMap) by clicking on the "Improve Park Tiles" link in the bottom right-hand corner of every map that utilizes Park Tiles.

Click on 'Improve Park Tiles' to jump into editing Places

As always, please let us know what you think by reaching out via email or Twitter. You can also create bug or enhancement requests in the Places issue tracker.

Park Tiles Imagery

Posted on 28 May 2014 by Mamata Akella

We're excited to share the newest addition to our suite of custom NPS basemaps: Park Tiles Imagery.

Park Tiles Imagery is a reference overlay that can be placed on top of imagery services licensed by the NPS, including Bing, Esri, and Mapbox. NPS employees can now seamlessly switch between Park Tiles and Park Tiles Imagery for their mapping needs.

Stay tuned for more news about how we are customizing Park Tiles for different use cases - including mobile and multiple overlay types. And make sure you view the map above on your retina device!

Adding Park Tiles to ArcGIS Desktop

Posted on 23 May 2014 by David Warren

We just made a big update to the National Park Service's basemap, Park Tiles, and have fielded questions from quite a few GIS users in the NPS who want to bring the basemap into ArcGIS Desktop. Luckily the process is fairly simple!

To start, you must either be part of the NPS Organizational Account for ArcGIS Online or create an account within the NPS GIS Portal. If you do not already have an NPS Organizational Account, send me an email and I'll respond with an invitation. Or, if you prefer, you can sign in to the NPS GIS Portal and create your own account instantly.

In ArcGIS versions 10.2 and above, it is now possible to pull in tiled map services from basemap providers other than Esri, such as Mapbox, Stamen, and, of course, the National Park Service. To access these basemaps, you must first run ArcGIS Administrator (assuming you have administrator rights on your computer).

ArcGIS Administrator

Click the “Advanced” button in ArcGIS Administrator, and then choose “Manage Portal Connections”.

Manage Portal Connections

This will allow you to add your NPS Organizational Account and/or a NPS GIS Portal account to ArcGIS Desktop. is already added to your connections, so you don't need to manually add it. If you'd like to add the NPS GIS Portal Account, select “Add”.

Add the NPS GIS Portal Account

Next you will be prompted to connect to the NPS GIS Portal account. This can be done by placing into the address bar and clicking “OK”.


If you prefer to connect to the NPS GIS Portal through ArcGIS Desktop, ensure that the portal entry is highlighted and choose “Connect”.

Connect to the NPS GIS Portal

Click “Save” and then “OK” to close out ArcGIS Administrator. You should now be set up to interact directly with or NPS GIS Portal via ArcGIS Desktop. From here, you can open a blank map document in ArcMap and choose “File > Sign In”.

Sign in

For the rest of this walkthrough, I am going to sign in to the NPS GIS Portal because that’s what I highlighted in ArcGIS Administrator. If was highlighted before saving, you will also see the option to sign in to

Sign in to the NPS GIS Portal using the login credentials you created in a previous step.

Sign in to the NPS GIS Portal

After signing in to the NPS GIS Portal, you can add the Park Tiles basemap - as well as basemaps from other providers. Go to "File > Add Data > Add Basemap". The “Add Basemap” window will open, and all the basemap items available through the NPS GIS Portal will be available to you.

Add Basemap

Under the "Table of Contents", with the “List by Drawing Order” tab highlighted, you should see Park Tiles available under the “Basemap” Layer.

List by Drawing Order

The map will not display until you complete one last step. Right-click on the “Basemap” level, and choose “Ungroup”. By default, ArcMap pulls basemaps in as "Group Layers", and ungrouping releases the tiles. Now you should be able to use Park Tiles within ArcGIS Desktop.

Ungroup the Basemap

You can use this same process for all basemaps added to the NPS Organizational Account and NPS GIS Portal. If you have any questions feel free to get in touch. Enjoy your mapping!

The Final Map

Using CartoDB to Label Detailed Lines in TileMill

Posted on 19 May 2014 by Mamata Akella

The best practice for labeling detailed lines at smaller scales in TileMill is to create a generalized line dataset for labeling while using the more detailed line dataset for display. There are several approaches that can be used to accomplish this task, some of which are described below.

A more detailed how-to is provided for an approach we found to be best suited for a recent project where we used CartoDB to generalize lines to label roads in TileMill.


One approach it to use either QGIS or ArcGIS to generalize lines at multiple tolerances for labeling at different scales. The result of this, as many of you know, is multiple generalized output datasets that are styled in TileMill depending on the scale level. This approach requires bringing each simplified dataset into TileMill in order to see if the simplification results were successful and to test out the labels, and, if the results aren't desirable, going back to either QGIS or ArcGIS and re-running the process.


A TileMill workflow is to connect directly to a PostGIS database and create a simplification query. This is a good solution if you are comfortable setting up and importing data into PostgreSQL/PostGIS, but it should be noted that tile creation can slow down if TileMill has to wait for simplification to take place in the database. This is especially true for large datasets.

An alternative (and recommended) solution for TileMill is to use PostgreSQL/PostGIS and add multiple attributes to the line dataset where different simplified geometries can be stored. Those attributes can then be used in TileMill to label lines at different scales. This can be a little intimidating if you aren't familiar with PostgreSQL/PostGIS, but storing simplified values in the line dataset minimizes the amount of additional datasets that need to be managed and the amount of work TileMill has to do.


The solution that I found to be most efficient and least intimidating was to use CartoDB which is basically PostgreSQL and PostGIS running in the cloud. When you upload a dataset to CartoDB, it is read into a spatially-enabled database.

A really neat (and powerful) feature of CartoDB is the ability to write SQL queries using the SQL API. This means that data stored in CartoDB can be modified and queried on the fly using SQL statements run through the SQL API.

To relate this back to our generalized lines for labeling roads:

  • We can store our line dataset in CartoDB
  • We can query that dataset, via the SQL API, multiple times with different simplification tolerances
  • We can then access the simplified version in TileMill and style it accordingly
  • If the simplification results are not satisfactory, we can easily change the query and see a different simplification tolerance on the fly in TileMill

The map I designed is meant to display road closure status for zooms 9-14. Given the map's intended use, it is important that road labels display at all zoom levels. Using the original line dataset at zooms 9 and 10 was the biggest issue; some roads were being labeled, but not as many as I wanted. At larger zooms (11-14), generalized lines were not needed and default label placement in TileMill worked well.

Road labels at zoom 10 with non-generalized lines Road labels at zoom 10 with non-generalized lines.

Road labels at zoom 10 with generalized lines Road labels at zoom 10 with generalized lines.

You'll notice that using generalized lines for labeling at zoom 10 allows more roads to be labeled and also results in better placement and distribution.


Here is an outline of the workflow we used to bring in generalized line data from CartoDB to label our roads in TileMill:

  1. Upload roads data to CartoDB
  2. Construct a SQL API request to run simplification on the roads table stored in CartoDB
    • Follow this basic template from CartoDB to get started:
      http://{account}{SQL statement}
    • For our map, we constructed the following query where ST_SIMPILFY is the simplification method:
      https://{account} ST_SIMPLIFY(the_geom,  1700) as the_geom,name FROM roads&format=geojson
  3. Paste the constructed URL in TileMill's layer editor:
  4. Apply styling to the road labels in TileMill using CartoCSS:
     text-name: [name];
     text-size: 12;
     text-face-name:'Open Sans Regular';
     text-fill: red;
     text-halo-fill: white;
     text-halo-radius: 1.5;
     text-placement: line;
  5. If you aren't satisfied with the results, modify the SQL query to test out different simplification values:
    • From our constructed URL example above, the simplification tolerance is 1700 (meters because our data are in Web Mercator)
    • To experiment with different values, open the layer editor in TileMill, change the simplification tolerance and resave the project
    • Since the CartoCSS for road labels is already defined, the road labels will automatically update using the new simplification value
  6. If you want to use generalized lines to label at multiple zoom levels, add another layer to TileMill and modify the SQL query to best suite the zoom level you are designing for
  7. Experiment with different values until you are satisfied with the results!

Using this method, I only had one dataset to manage, could test out different simplification values on the fly, and avoided the hassle of setting up a database.