Города и расстояния (CityData и Geodesy)
В подпакете CityData можно найти функции, позволяющие найти координаты большинства крупных городов мира: CityData [city, datatype], CityData [city] и CityData[datatype]. Например:
<
<
Miscellaneous`CityData`
CityData[
"Montreal"
,
CityPosition]
{{
45
,
30
}, {
-
73
,
-
36
}}
CityData[
"Washington"
]
{{CityPosition, {{
38
,
53
,
42
}, {
-
77
,
-
2
,
-
12
}}}}
Координаты (широта и долгота) выдаются в формате {градусы, минуты} или {градусы, минуты, секунды}.
В этом же подпакете есть функции для вычисления расстояний между городами:
- CityDistance [ "cityl", "pity"] – возвращает расстояние между двумя указанными городами;
- CityDistance["cityl","city",CityDistanceMethod › Method] – возвращает расстояние между двумя указанными городами со спецификацией метода вычислений (по умолчанию используется функция SphericalDistance из подпакета Geodesy).
Пример вычисления расстояния между городами дан ниже:
CityDistance[
"Washington"
,
"Montreal"
]
//N
786.915
Базу данных можно расширять, добавляя в нее информацию о новых городах:
CityPosition[{
"Champaign"
,
"USA"
,
"IL"
}]
=
{{
40
,
7
,
5
},
{
-
88
,
-
14
,
-
48
}};
Убедимся, что информация действительно добавлена:
CityData[
"Champaign"
, CityPosition]
{{
40
,
7
,
5
}, {
-
88
,
-
14
,
-
48
}}
Для добавления новых полей в базу данных можно использовать функцию AppendTc (см. урок 9). Например, добавим поле для хранения информации о населении:
AppendTo[$CityFields, CityPopulation]
Теперь введем в базу данных информацию о населении Вашингтона:
CityPopulation[{
"Washington"
,
"USA"
,
"DC"
}]
=
638000
;
Проверим результат, запросив всю имеющуюся в базе информацию об этом городе:
CityData[
"Washington"
]
{{CityPosition, {{
38
,
53
,
42
}, {
-
77
,
-
2
,
-
12
}}},
{CityPopulation,
638000
}}
Как видите, результат теперь включает новую информационную категорию – CityPopulation.
В подпакете Geodesy есть функции, вычисляющие расстояние между двумя точками с учетом выпуклости Земли:
- SphericalDistance [pos1,pos2] – вычисляет расстояние между двумя точками в предположении, что Земля – идеальный шар (сфера);
- SpheroidalDistance [pos1,pos2] – вычисляет расстояние между двумя точками в предположении, что Земля – приплюснутый шар (сфероид).
Примеры вычислений по этим функциям представлены ниже:
SphericalDistance[{
0
,
0
}, {
45
,
-
45
}]
//N
6671.7
SpheroidalDistance[{
0
,
0
}, {
45
,
45
}]
//N
6662.47
%
-
%
%
-
9.23014