Связь округов США
Построить карту, показывающую соседние округи США.
Составить список всех округов в сопредельных континентальных штатах США.
In[1]:=
Length[counties =
Flatten[EntityClass["AdministrativeDivision",
"ContinentalUSStates"]["Subdivisions"]]]
Out[1]=
Добавить к списку округ Колумбия, который не является подразделением ни одного из 48 сопредельных штатов.
In[2]:=
AppendTo[counties,
Entity["AdministrativeDivision", {"DistrictOfColumbia",
"DistrictOfColumbia", "UnitedStates"}]];
Составить список округов, граничащих друг с другом.
In[3]:=
bordering = EntityValue[counties, "BorderingCounties"];
Исключить из списка случаи, для которых информация о граничащих гео-объектах недоступна.
In[4]:=
Length[missingpos = Position[bordering, _Missing]]
Out[4]=
In[5]:=
counties = Delete[counties, missingpos];
bordering = Delete[bordering, missingpos];
Построить график, отображающий сопредельные округи в США.
In[6]:=
Length[edges =
DeleteDuplicates[
Sort /@ Flatten[
MapThread[Thread[UndirectedEdge[##]] &, {counties, bordering}]]]]
Out[6]=
In[7]:=
Graph[counties, edges]
Out[7]=
Загрузить информацию о местоположении всех округов.
In[8]:=
pos = GeoPosition[EntityValue[counties, "Position"]]
Out[8]=
Воспользуемся следующей картографической проекцией.
In[9]:=
proj = {"LambertAzimuthal",
"Centering" ->
Entity["City", {"Topeka", "Kansas", "UnitedStates"}]};
In[10]:=
projpos = First@GeoGridPosition[pos, proj];
В результате получим следующий график-вложение.
In[11]:=
graph = Graph[counties, edges, VertexCoordinates -> projpos]
Out[11]=
Чтобы переместиться из округа Сан-Франциско в Манхэттен, необходимо посетить по крайней мере 67 округов США.
In[12]:=
Length[path = FindShortestPath[graph,
Entity[
"AdministrativeDivision", {"SanFranciscoCounty", "California",
"UnitedStates"}],
Entity[
"AdministrativeDivision", {"NewYorkCounty", "NewYork",
"UnitedStates"}]]]
Out[12]=
In[13]:=
HighlightGraph[graph, PathGraph[path]]
Out[13]=