Take the 2-minute tour ×
Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. It's 100% free, no registration required.

Here's in interesting challenge: I need to embed a table in a map layout so that the records in the table are sorted according to their geographic position on the ground. For example, in a north-to-top map, the northern-most feature (points in this case) should be first record, and the southern-most the last.

The map composition is in ArcGIS, but I'm willing to use gdal/ogr, qgis, etc. for the table sorting if need be.

To expand this question beyond my immediate use case and thereby make it more useful to the community, a robust solution would allow choosing other geographic sorts, such as west to east or inner to outer.

illustration

share|improve this question
    
What Coordinate System are you using? –  Mapperz May 7 '13 at 18:05
    
@mapperz, geographic decimal degrees, but it could easily be UTM or Albers if needed. –  matt wilkie May 7 '13 at 18:22
add comment

2 Answers

up vote 6 down vote accepted

To sort in the direction with a bearing of a degrees east of north, precompute the unit direction vector as (sin(a), cos(a)).

With a field calculation, obtain the (projected) [X] and [Y] coordinates of features (use their centroids or whatever for non-point features) if they aren't already available and compute a new field equal to the distance along the bearing, given by the dot product of the direction vector with the coordinates:

z = sin(a) * [X] + cos(a) * [Y]

Sort the table on [z] in ascending order.

For example, for a north-to-south sort the bearing is 180 degrees, v = (sin(180), cos(180)) = (0, -1), and the resulting sort therefore is on -[Y], which arranges the records from largest [Y] (first) down to smallest [Y] (last), exactly as intended.


An "inner to outer" sort could mean many things, but one interpretation is that the sorting should be by distance relative to a central location. A similar solution applies, using the Pythagorean theorem to compute (squared) distance from a fixed point. (Applying the square root is unnecessary because it does not change the sort order.)


A more fanciful sort order is explained and illustrated at "One-dimensional map of the world."

share|improve this answer
add comment

To express whuber's answer in terms of tool use, here's a simple implementation of the North-South, East-West use case when using point data in Arcgis:

  • Add X and Y (or Lat and Long) columns to the attribute table, Calculate Geometry
  • export to Excel or whatever, sort by the column of interest (X for East-West, Y for North-South), and then bring back in with Add X/Y data.

courtesy of Esri Technical Article HowTo: Sort features North/South or East/West for Export

Change order of features in a shapefile has solutions to do the table sorting part for both Arcgis and Qgis without need to export to an external program (though you still need to duplicate the table/feature class), and sorting the records in a shapefile based on an attribute(eg: pop) and then adding a new field indicating ranks using python has an arcpy method.

share|improve this answer
    
ArcGIS 10.0 and greater provides a Spatial Sort option in the Sort Tool. –  klewis May 13 '13 at 17:16
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.