ПРОГРАММИРОВАНИЕ В ГИС
КАК СОЗДАТЬ ОБЪЕКТЫ НА КАРТЕ ПРИ ПОМОЩИ КОДА?
1
До этого мы с вами создавали карты, используя инструменты визуализации.
Но также пространственные данные можно строить, используя код.
2
В геоинформатике очень много программирования.
Обычно используется следующий стек языков:
SQL - для организации баз данных;
Python - для взаимодействия с данными;
Java/Kotlin - для визуализации данных.
3
Сами данные при ГИС-разработке можно представить в следующих видах (форматах представления):
  • Plain text - обычный текст;
  • XML - язык разметки;
  • JSON - текстовый формат обмена данными;
  • Binary - двоичный код.
4
  • Наиболее распространенным форматом представления данных в ГИС-разработке является JSON.
JSON (англ. JavaScript Object Notation) — текстовый формат обмена данными, основанный на JavaScript.

Рассмотрим, как устроена структура JSON-документа.
Простой пример. В JSON файле прописана информация о городе Санкт-Петербурге: название города и год основания.

Информация будет выглядеть следующим образом:
{
"name": "Санкт-Петербург",
"year": 1703
}
Введите этот код на сайте jsonformatter.org
Как вы видите, у нас появилось две строки, заключенные в фигурные скобки.
Фигурными скобками мы обозначаем объект - в данном случае - информацию о городе Санкт-Петербурге.

После идут строки - слева от двоеточия - ключ, а справа - значение.
Два ключа разделены запятой.

Давайте усовершенствуем скрипт. Например, мы знаем координаты города. Мы можем вставить их в наш JSON. Введем соответствующие ключи:
{
"name": "Санкт-Петербург",
"year": 1703,
"latitude": 59.950000, //широта
"longitude": 30.316670 // долгота
}
Однако есть нюанс. Добавить такие данные на карту мы не сможем.
Как вы помните, пространственные данные в большинстве случаев представлены векторной и растровой (пиксельной) моделью.

То есть, чтобы добавить координаты Питера на карту, нам надо прописать, какой вид пространственной модели мы хотим использовать.

Именно для решения этой задачи был разработан отдельный вид формата представления данных - GeoJSON.

Посмотрим, как будет выглядеть структура наших данных про Питер в GeoJSON:
Во первых, у нас появилась более сложная структура кода. Рассмотрим его подробнее.

"type": "FeatureCollection" - здесь мы говорим, что планируем использовать элементарные объекты (точки, линии, полигоны).

Далее - определяем конкретный объект, используя "features".
Указываем его свойства через ключ "properties".

Как вы заметили, у нас добавился ключ "geometry", в котором у нас прописываются тип данных - точка ("type": "Point"), а также координаты ("coordinates").

Заметьте, координаты заключены в квадратные скобки. Внутри скобок идет набор значений - это массив. Его особенность в том, что внутри массива менять значения нельзя ни местами, ни символами.

И главное - запомните - сначала мы прописываем долготу, а потом - широту.

Тестировать сегодняшний код мы будем на сайте geojson.io
{
 "type": "FeatureCollection",
 "features": 
 [
     {
      "type": "Feature",
      "properties": 
      {
        "name": "Санкт-Петербург",
        "year": 1703   
      },
      "geometry": 
       {
        "type": "Point",
        "coordinates": 
        [
          30.315626116248325,
          59.92467869425286
        ]
       }
    }
  ]
}
В коде выше я использовал табуляцию (переносы) - я так привык.
Но вы можете записать код и вот таким образом.
Он останется работоспособным, однако его будет сложно читать
{"type": "FeatureCollection", "features":[{"type": "Feature","properties": {"name": "Санкт-Петербург", "year": 1703}, "geometry": {"type": "Point", "coordinates": [30.31562, 59.92467]}}]}
Давайте попробуем кастомизировать нашу точку. Для это изменим ее цвет и иконку внутри:
{
  "type": "FeatureCollection",
  "features": 
  [
     {
      "type": "Feature",
      "properties": 
      {
        "name": "Санкт-Петербург",
        "marker-symbol": "city",
        "marker-color": "#227fb9",
        "marker-size": "large"
      },
      "geometry": 
      {
        "type": "Point",
        "coordinates": 
        [
          30.31562,
          59.92467
        ]
      }
    }
  ]
}
Добавим линию
{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "properties": {
        "name": "Санкт-Петербург",
        "marker-symbol": "city",
        "marker-color": "#227fb9"
      },
      "geometry": {
        "type": "Point",
        "coordinates": [
          30.315626116248325,
          59.92467869425286
        ]
        
      }
    },
    {
      "type": "Feature",
      "properties": 
      {
       "stroke": "#115878"
      },
      "geometry": {
        "type": "LineString",
        "coordinates": [
          [
            30.3189015832333,
            59.928508565876626
          ],
          [
            37.569957159675624,
            55.76073301478695
          ]
        ]     
      }
    }
  ]
}
X
Задание: построить карту путешествия из Сыктывкара в Гетеборг (Швеция)

Схема:
  1. Перелет Сыктывкар - Москва (Шереметьево)
  2. Перелет Москва (Шереметьево) - Хельсинки (Финляндия)
  3. На машине из Хельсинки в Турку
  4. На пароме из Турку в Стокгольм (Швеция)
  5. На поезде из Стокгольма в Гетеборг.
Условия:
Точки аэропортов должны быть зеленого цвета с иконкой самолета.
Точки морских портов - синие с иконкой корабля.
Точки ж/д вокзалов - красные с иконкой поезда.

Линии перелетов - зеленые
Линии морских передвижений - синий
Линии передвижения на авто - черные
Линии ж/д поездок - красные.

Цвета:
#407ee2 - синий
#73ab5f - зеленый
#575f54 - черный
#ee2020 - красный



Иконка самолета: airport
Иконка корабля: ferry
Иконка авто: car
Иконка поезда: rail
Made on
Tilda