4

I'm working on a system that uses bounding boxes as a fast first check for a point-in-polygon filter. My current naive implementation (just taking the min/max lat and lng for all points) fails on polygons that cross the antimeridian (180 longitude).

I've done enough research to determine that the Right Way is probably to use spherical polygons, but I'm hoping to avoid the complexity of this approach (code complexity and time complexity). I think I can ignore issues at the poles, at least for the present, so the problem is relatively simple if I can accurately identify polygons that cross the antimeridian, set the appropriate east/west values, and then change the bbox check if east < west. But I'm stuck on identification.

Constraints:

  • I don't control the format of the input polygons.
  • I assume all longitudes in the polygon are in the range -180 - 180
  • I assume that all input polygons follow the right-hand rule, i.e. have a counter-clockwise winding order.

Given these constraints, what's the easiest way to identify a polygon that crosses 180 longitude?

  • 1
    You see if succeeding vertices are more than some <large value> apart and/or change sign in the longitude values. – mkennedy Sep 22 '17 at 18:33
  • @mkennedy - but that disallows polygons with arcs > 180 degrees; I'd like to avoid that. – nrabinowitz Sep 22 '17 at 20:43
  • Large value could be set to 270 or 350. Having a two-point line with a length larger than 180 degrees (or say 270) anywhere except near a pole is...chancy. – mkennedy Sep 22 '17 at 21:32
  • If all coordinates indeed are in the [-180,180] interval then there are no crossings of the antimeridian! – whuber Jan 4 at 23:26
  • @whuber I don’t understand your comment - I’m assuming all longitudes are normalized to this range, but may well be part of an anti-meridian crossing polygon. – nrabinowitz Jan 6 at 6:19
1

The easiest way to identify a polygon that crosses 180 longitude is:

  1. Create polyline vector file with antimeridian line that crosses 180 (for test purposes I used GCS_WGS_1984 WKID: 4326 Authority: EPSG coordinate system).
  2. Use select by location tool to select polygon features that intersect antimeridian line.

This method is tested with ArcGIS Desktop:

Picture 1: WGS 84 test Picture 2: UTM test

  • Nothing in the question indicates access to ArcGIS Desktop; OP is looking for an algorithm, not a pre-existing (and incidentally closed-source) tool. – Richard Law Dec 4 '18 at 7:45
  • 1
    @RichardLaw This method is not programm dependant. You can implement your own select by location tool. How can you see in the answer this method is tested with ArcGIS Desktop. So you can test it in QGIS or where ever you want. This answer points OP to the need of creating his own select by location tool. – Mr. Che Dec 4 '18 at 9:47

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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