In this computational essay, I will discuss how to obtain the area of responsibility (AOR) for six geographic combatant commands defined by the United States Department of Defense’s Unified Command Plan:
◼
Africa Command (AFRICOM),
◼
Central Command (CENTCOM),
◼
European Command (EUCOM),
◼
Indo-Pacific Command (INDOPACOM),
◼
Northern Command (NORTHCOM), and
◼
Southern Command (SOUTHCOM).
I have not considered the newly established Space Command (SPACECOM) whose AOR is defined as the area surrounding the earth at altitudes equal to or greater than 100 km above mean sea level.
Although there are plenty of maps about AOR of the mentioned geographical commands, I could not find any computational dataset (aka, map). Therefore, I decided to generate them, and the best tool that I know of for this aim, is Wolfram Language.
This computational essay is a by-product of another project of mine on the Indo-Pacific region. “Indo-Pacific” is at the center of contemporary geopolitical discourse, although it has been long-discussed in the biological sciences. It is a buzzword that is hardly missed by any politician and geopolitical scholar. Not only global powers, but also most regional powers have already penned down their national strategic plans for the Indo-Pacific mega-region. For example, take a look at the latest US national defense strategy, or US national security strategy. One can safely say that the Indo-Pacific is where the future of the world will be determined.
The immediate question is where is the Indo-Pacific region? Oddly enough, there is no clear answer to this question. Hardly any government bothers to define the borders of what they consider as the Indo-Pacific mega region. I think the best answer is provided by US government when the US Pacific Command (USPACOM) was renamed to U.S. Indo-Pacific Command on 30 May 2018. However, as said, there was not any computational dataset for AOR of six geographical US commands. So I created that. I am very positive that this data will be very useful for many other discussions, beyond the scope of this computational essay.
Final result
Final result
Wikipedia map of the six geographic US combatant commands
In[]:=
I’ve already put the geographic maps on WolframCloud and they are public.
In[]:=
AFRICOM=CloudGet[CloudObject["https://www.wolframcloud.com/obj/2d66180d-a1e5-42ac-8cc3-ef8f6dba0b0f"]];CENTCOM=CloudGet[CloudObject["https://www.wolframcloud.com/obj/aecd2d95-d1eb-4f6e-a7c4-c29d896a4daa"]];INDOPACOM=CloudGet[CloudObject["https://www.wolframcloud.com/obj/a3e04d10-4a47-4193-ae87-61ae14c8ccea"]];EUCOM=CloudGet[CloudObject["https://www.wolframcloud.com/obj/eedf120a-8764-4c21-94f0-eef8f25a8a08"]];SOUTHCOM=CloudGet[CloudObject["https://www.wolframcloud.com/obj/8b798ad6-8130-4299-abf3-ea7ee80cb7fc"]];NORTHCOM=CloudGet[CloudObject["https://www.wolframcloud.com/obj/194d41e0-c5d7-487a-9de1-8937b52d98ea"]];
In[]:=
Legended[GeoGraphics[{EdgeForm[Black],GeoStyling[Opacity[.4]],Transpose[{colors={Yellow,Orange,Red,Blue,Green,Cyan},Tooltip[#2,#1]&@@@Transpose[{labels={"AFRICOM","CENTCOM","EUCOM","NORTHCOM","SOUTHCOM","INDOPACOM"},{AFRICOM,CENTCOM,EUCOM,NORTHCOM,SOUTHCOM,INDOPACOM}}]}]},GeoRange"World",GeoProjection->"Robinson",PlotLabel"Six Geographic US combatant Commands"],SwatchLegend[colors,labels]]
Out[]=
AFRICOM
AFRICOM
In[]:=
ClearAll["Global`*"]
Given two points the following function will generate 10 equidistant points in between along the Rhumb line connecting the original points.
In[]:=
jump[{pt1_,pt2_}]:=GeoDestination[pt1,MapAt[Range[0,#,#/10]&,GeoDisplacement[pt1,pt2,"RhumbLine"],{1,1}]]//First
Define points of a polygon that covers the lower part of AFRICOM:
In[]:=
pntsAf0={-89.99,FromDMS["68°E"]},GeoBounds1,1,FromDMS["68°E"],GeoBounds1,1,GeoBounds2,1-10,FromDMS["21°N"],GeoBounds2,1+10,{FromDMS["21°N"],FromDMS["30°W"]},{FromDMS["4°N"],FromDMS["30°W"]},{FromDMS["4°N"],FromDMS["24°W"]},{-89.99,FromDMS["24°W"]};
Generate 10 equidistant points between points defined in the previous line:
In[]:=
polyPnts=jump/@Partition[Append[pntsAf0,pntsAf0[[1]]],2,1]//Flatten[#,1]&;
Discretizes the previous polygon into a BoundaryMeshRegion:
In[]:=
regAf0=BoundaryDiscretizeRegion@Polygon@polyPnts;
Discretizes the region defined by the Africa’s polygon into a BoundaryMeshRegion:
In[]:=
regAfrica=BoundaryDiscretizeRegion@Polygon["Polygon"][[1,1,1]];
In[]:=
LegendedGeoGraphicsEdgeForm[Black],FaceForm[Green],Polygon[GeoPosition[polyPnts]],EdgeForm[Red],FaceForm[Red],PolygonGeoPosition["Polygon"][[1,1,1]],ImageSizeSmall,FrameTrue,SwatchLegend[{Green,Red},{"regAf0","regAfrica"}]
Out[]=
Discretizes the region defined by the Egypt polygon into a BoundaryMeshRegion:
In[]:=
regEgypt=BoundaryDiscretizeRegion@Polygon["Polygon"][[1,1]];
Remove the Egypt polygon from Africa’s, find the resulting polygon, and discretize it into BoundaryMeshRegion:
In[]:=
regAfrica2=BoundaryDiscretizeRegion[RegionDifference[regAfrica,regEgypt]]//MeshPrimitives[#,2]&//First//BoundaryDiscretizeRegion;
In[]:=
GeoGraphics[{EdgeForm[Black],Polygon@GeoPosition@MeshCoordinates@BoundaryDiscretizeRegion[RegionDifference[regAfrica,regEgypt]]},ImageSizeSmall,FrameTrue,PlotLabel"regAfrica2"]
Out[]=
Discretizes the region defined by the Antarctica’s polygon into a BoundaryMeshRegion:
In[]:=
antReg=["Polygon"][[1,1,1]]//Polygon//BoundaryDiscretizeRegion;
Cut out the Antarctica’s polygon from reg0, merge the result with regAfrica2, and finally return the boundary coordinates:
In[]:=
regPnts=RegionUnion[regAfrica2,RegionDifference[regAf0,antReg]]//MeshCoordinates;
Represent a two-dimensional geographical image of AFRICOM:
In[]:=
GeoGraphics[{EdgeForm[Black],AFRICOM=Polygon[GeoPosition[regPnts]]},PlotLabel"AFRICOM: Area of Responsibility",FrameTrue]
Out[]=
CENTCOM
CENTCOM
Define points of a polygon that covers the lower part of CENTCOM:
Discretizes the previous polygon into a BoundaryMeshRegion:
Discretizes the Mediterranean sea’s polygon into a BoundaryMeshRegion:
Discretizes polygons of Israel, West Bank and Gaza Strip into a BoundaryMeshRegion:
Discretizes the region defined by the Africa’s polygon into a BoundaryMeshRegion:
Merge regAfrica, regMed, and regIsreal regions, cut out the result from regCENT0, return polygons of the result, take the 4th polygon, and discretizes it into a BoundaryMeshRegion:
Why only 4th polygon? Because others are tiny islands along Egypt or Israel border, and are not important.
Generate list of countries in Middle east, remove Israel, Turkey, West Bank, Gaza strip, and Cyprus from it, add Afghanistan, Pakistan, Kyrgyzstan, Turkmenistan, Uzbekistan, Tajikistan, and Kazakhstan into the list:
Generate the polygons of countries in the list, discretize the borders, merge the corresponding regions, discretize the boundary of results, and return the outer polygon:
Since there are some tiny regions after merging the polygons (borders do not match exactly in Wolfram dataset), I have used OuterPolygon to get rid of them.
Merge the previous result with regMid and return the resulting polygon:
Represent a two-dimensional geographical image of CENTCOM:
INDOPACOM
INDOPACOM
INDOPACOM’s Area of Responsibility (AOR) encompasses the Pacific Ocean from Antarctica at 92°W, north to 8°N, west to 112°W, northwest to 50°N/142°W, west to 170°E, north to 53°N, northeast to 62°30’N/175°W, north to 64°45’N/175°W, south along the Russian territorial waters to the People’s Republic of China, Mongolia, the Democratic People’s Republic of Korea, the Republic of Korea, and Japan; the countries of Southeast Asia and the southern Asian landmass to the western border of India; the Indian Ocean east and south of the line from the India/Pakistan coastal border west to 68°E, south along 68°E to Antarctica; Australia; New Zealand; Antarctica, and Hawaii.
In WL, the geo-coordinates are separated based off the east–west position of a point (if the longitude is positive or negative). For example, Pacific ocean polygon is two polygons (west and east).
Therefore, given the geographic scope INDOPACOM, I will break it down into two sets of points: east and west. However, as the first step, I will identify simple east-west polygons with sharp edges.
Find the interpolation function between two points as a function longitude:
First, from the geo description of INDOPACOM, I will pick points close to Russian border as follows:
Then I will choose easter, western points, and for each one, I will add more equidistant points in between using jump function I defined before
Define eastern points:
Given two points the following function will generate 10 equidistant points in between along the Rhumb line connecting the original points.
Connect every two successive eastern points by 10 equidistance points in between using jump function:
Define western points:
Connect every two successive western points by 10 equidistance points in between using jump function:
Polygon close to eastern part of Russia
Polygon close to eastern part of Russia
Easter and western polygons (larger polygons)
Easter and western polygons (larger polygons)
Generate the polygon from joining pntE with pntW, then discretize its boundary:
Generate the polygon Antarctica boundary, then discretize it:
Merge the two regions, then discretize its boundary:
Return polygons of countries above the INDOPACOM AOR:
Take the coordinates of boundaries, make a polygon from each set, and give the union of the regions:
Cut out cn from reg1IP, then discretize the boundary of the result:
Return the corresponding polygons in the region:
Join the boundary of the polygons obtained in the previous step with westTopPoints, then generate a geographical image of the corresponding polygon:
Excluding Russian islands
Excluding Russian islands
Within the outer boundary of INDOPACOM’s AOR, there are a few Russian islands that are within the AOR of EUCOM. So we should find those islands and exclude them from INDOPACOM’s AOR.
For all sub-list in the outer polygon of INDOPACOM, generate a line after interpreting each coordinate as GeoPosition:
For all Russian islands, return corresponding polygon, then discretize its boundary:
Select those islands that are within the outer boundary of INDOPACOM:
For Russian islands within the outer boundary of INDOPACOM, generate geo-polygon, and then replace Polygon head by Line:
EUCOM
EUCOM
I will start by defining a region containing lower and upper latitude of the EUCOM’s AOR. Then, I will cut out the AFRICOM, CENTCOM, and INDOPACOM from the lower part; and add the rest of the Greenland, together with its Islands.
Generate a big region containing the part of the EUCOM with positive longitudes:
Generate a discretized boundary of the Greenland geo-polygon:
Give a union of Greenland and the initial region defined by pntsEU, then return the corresponding polygons:
Generate easter part of the INDOPACOM’s AOR as a discretized boundary mesh:
Cut out the AORs of INDOPACOM, AFRICOM, and CENTCOM from from the polygons of poly0EU, then return the resulting polygon:
Cut out the AORs of INDOPACOM, AFRICOM, and CENTCOM from from the polygons of poly0EU, then return the resulting polygon:
Generate a big region containing the part of the EUCOM with negative longitudes:
Generate the discretized boundary mesh of polygons containing pntEUwest:
Generate the discretized boundary mesh of Russian polygon containing only negative longitudes:
Find the highest latitude of within the Russian polygon where a corresponding parallel of latitude in reg1EU will be completely within the Russian polygon:
Define a new region using higherLat such that the lower part is within Russian polygon:
Give the coordinates of a region which is the union of russiaW and reg2EU:
Generate geo-graphical images of reg1EU, reg2EU and polyEUwest:
Combine polyEUwest and Russian Islands with the rest of EUCOM and generate the geo-graphical maps in different projections:
SOUTHCOM
SOUTHCOM
The SOUTHCOM case is more complicated. Like other cases, I couldn’t find any description of the boundaries besides a map. Given the map, it seems that the northern part of the boundary follows the southern territorial water boundary (12NM) of Guatemala, then through Guatemala-Mexico border, Mexico-Belize border, territorial waters of Belize, of Mexico and of Cuba, and then some Rhumb lines. Whenever the territorial water boundaries are needed, I’ve extracted the data from MarineRegions.
Extract the Exclusive Economic Zones of Belize from http://www.marineregions.org/, then give a union with the Belize’s geo-polygon, and generate the corresponding coordinates:
Extract the 12NM territorial water boundary of Cuba from http://www.marineregions.org/, then generate the corresponding coordinates:
Extract the 12NM territorial water boundary of Mexico from http://www.marineregions.org/, then generate the corresponding coordinates:
Extract the 12NM territorial water boundary of Guatemala from http://www.marineregions.org/, then generate the corresponding coordinates:
Find the intersection point of the 92nd meridian west with the guatemalaTW12NM:
Replace the 2nd element of reg0SouthPnts by the intersection point, newPnt, obtained in the previous step:
Generate a discretized boundary of the polygon with points reg1SouthPnts:
Give the union of the Caribbean sea polygon with cuba (12NM territorial waters), then remove the overlap parts with mexico and reg1South; finally generate polygons of the result, and return the 3rd one:
Give the union of reg1South, belizzEEZ, guatemalaTW12NM, Guatemala’s geo-polygon, and carribean; then combine it with the reg1South, and the union as a discretized boundary:
Generate a geo-image of reg2South:
As you see, Antarctica has some islands that are within reg2South, but they are under AOR of INDOPACOM. So in the AOR of SOUTHCOM, they should appear as holes.
Discretize the outer geo-polygon of the reg2South (excluding its islands) :
Discretize the outer geo-polygons of the Antarctica islands :
Select Antarctica islands that are within reg2South, then generate a line of their geo-coordinates:
Cut out the outer geo-polygon of Antarctica from reg2South, then generate the corresponding polygon’s points, interpret them as geo-coordinates and return a line passing through them:
Represent SOUTHCOM as a list of separate filled component curves with outerline as the first components and antIslandsWithinSouth as other components:
NORTHCOM
NORTHCOM
Find the interpolation function between two points as a function longitude: