tips on creating reporting units

The first step in a custom Ocean Health Index analysis is creating the reporting units for which you will summarize. For a country level analysis, this is most likely to be the states or provinces, i.e. the first administrative level below country.

Here we provide a little recipe for creating these in ArcGIS using the following data:

  • GADM - the Global Administrative Areas ( contain the geography up to 5 political levels for all countries globally.
  • EEZ - the Exclusive Economic Zones () describe the 200 nautical mile (nm) extent of all countries.
  • EEZ and land - with inclusion of the land and EEZ (, we can fill in any gaps between GADM and the EEZ.


There are several technical issues in generating regions which need need to: 1) not overlap with one another; and 2) cover the entire extent of the country without gaps. Here is the raw data displayed for our example country of Malaysia.

raw data: GADM and EEZ

The EEZ is in blue and the GADM is color coded by state. Notice finer subdivisions are included in the GADM. Now we just need to extend these subdivisions offshore to generate state-level waters. The typical buffer function in GIS, however, does not handle distinct overlapping regions.

raw data: GADM and EEZ

As you can see from this simple buffer result, the buffers extend into each other. We solve for this overlap issue by generating Thiessen polygons from the points on the outer edge of the land, which then gets intersected with the dissolved buffer. This is akin to the method used to originally create the EEZ boundaries. The result in this case with multiple buffers (at 3, 12, 50 and 100 nm) is unique and non-overlapping by state.

raw data: GADM and EEZ

Other issues become apparent if we zoom in. There is a clear mismatch in the land described by GADM versus assumed by the EEZ. We presume that the EEZ is authoritative and therefore need to correct for the land.

raw data: GADM and EEZ

By extending the GADM provinces out with these Thiessen polygons to the full extent of the EEZ and intersecting with the missing EEZ land, hitherto missing land can be attributed to a state.

raw data: GADM and EEZ

Some manual editing may be required beyond this recipe, since certain islands are not likely to be intersected by states and should instead by assigned wholly to one state. If the given country spans the international dateline (-180° W or 180° E), then a more complex analysis using geodetic distance should first be applied to the points (eg using geographiclib) and probably a Plate Carrée or other dateline spanning projection should be used. Finally, if the country’s EEZ is extensive than this method could be replaced with a raster method (“raster is faster, but vector is corrector”) using Polygon to Raster and Euclidean Allocation (alternate recipe forthcoming).

Script Recipe

Here’s a script which you can modify based on your local paths and desired buffer distances. It is recommended that each line be run sequentially in the Python window of ArcMap which will render the geographic outputs so you can visually inspect the process.

Future Work

  • Generate GeoJSON for storage as a shapes object. Easiest for now is to drag and drop *.shp files into
  • Fold this script into a function as part of the ohi-arcgis and ohi-opengis modules.
  • Create a global base layer extending the finest GADM subdivision and desktop functions to operate on this layer, which will greatly reduce the processing time (by removing the Create Thiessen Polygons step).
  • Create a web service for extraction of any country and subdivision buffer offshore or inshore.
  • Create a custom Albers Equal Area projection assigning the parallels to 1/6th of the EEZ extent to minimize distortion (a la
  • generate TopoJSON for display in the OHI Toolbox mapping interface which minimizes the storage size by removal of redundant vertices of polygon shared borders. (Bonus: Github rendering. How: topojson cmd or )