JavaScript

Вы знаете что такое GeoJSON?

Spread the love

Перевод: Mohamed Ashiq SultanDo you know GeoJSON?

PARUS AGENCY. Разработка сайтов в Самаре.

Полный спектр услуг по проектированию, дизайну, верстке, программированию в Самаре.
Компания PARUS AGENCY является Золотым сертифицированным партнером компании 1С-Битрикс. Выполнено более 280 проектов за 11 лет работы.
Мы помогли выйти на новый уровень и увеличить прибыль многим компаниям.

Наши сайты идеально решают поставленную задачу. Вы формулируете текущие задачи, стоящие перед вашим бизнесом, мы подбираем правильное решение. Новый сайт или достаточно лендинга, b2b сервисы, автоматизация, реклама.

Наши услуги:
создание сайта
— редизайн существующего сайта
— поддержка и развития сайта
— seo продвижение
— контекстная реклама
— аудиты
— лицензии 1С-Битрикс

Введение

Для тех, кто не знает, что такое GeoJSON — это стандартный формат данных, используемый для хранения данных о местоположении и географических объектах.

Содержание

  1. Терминология
  2. Различные типы геометрии
  3. Ресурсы

GeoJSON — это просто объект JSON. Что отличает этот тип данных от простого JSON, так это его структура.

Некоторые базы данных, такие как Mongo DB, имеют официальную поддержку GeoJSON. Так же, как MongoDB идентифицирует типы String и Integer, он идентифицирует и отличает GeoJSON от обычного JSON. MongoDB поставляется с поддержкой индексации и запросов к GeoJSON.

В этом посте я расскажу о некоторых основных концепциях GeoJSON.

Типичный объект GeoJSON выглядит примерно так.

{
    "type": "Feature",
    "properties": {},
    "geometry": {
        "type": "Point",
        "coordinates": [-40.078125,70.72897946208789]
    }
}

Терминологии

Координаты

Отдельная точка на карте называется координатой.

Когда мы указываем место на карте, мы указываем значение долготы и широты. Мы храним эти наборы значений в массиве, называемом координатами (coordinates).
Массив координат содержит два элемента — долготу и широту.
ПРИМЕЧАНИЕ: порядок важен
coordinates : [ longitude , latitude ]

Геометрия (geometry)

Думайте о геометрии как о структуре данных. Геометрия определяет, в какой структуре хранятся координаты.
Существуют предварительно определенные типы геометрии с учетом регистра, а именно «Point», «Line», «Polygon» и другие. Мы рассмотрим их одного за другим.

Типичная геометрия выглядит ниже

"geometry": {
    "type": "Point",
    "coordinates": [longitude,latitude]
}

type

Каждая геометрия должна иметь свойство с названием «type», значение которого должно быть одним из типов GeoJSON, упомянутых в GeoJSON RFC (https://tools.ietf.org/html/rfc7946#page-6).

Есть некоторые типы геометрии, которые используются для хранения других типов геометрии. Это «Feature» и «FeatureCollection», о которых мы поговорим ниже.

Типы геометрии

Point

Точка — это отдельная точка или маркер на карте. Его поле geometry содержит единственную координату. Это может быть использовано для хранения отдельного места, например магазина.

"geometry": {
        "type": "Point",
        "coordinates": [
            78.4918212890625,
            22.304343762932216
        ]
    }

MultiPoint

Как вы уже догадались по названию, геометрия MultiPoint используется для хранения нескольких точек координат в одной геометрии. Каждый элемент в массиве координат сам по себе является координатой. Это может быть использовано для хранения списка любимых мест.

{
    "type": "MultiPoint",
    "coordinates": [
        [80.26951432228088,13.09223800602329],
        [80.27061939239502,13.091631907724683],
        [80.2714991569519,13.09260375427521],
        [80.27050137519836,13.093241199930675]
    ]
}

LineString

Это линия точек. Структура JSON такая же, как и у MultiPoint, но поскольку это тип LinePoint, отдельные координаты рассматриваются как соединенная линия, а не точки, лежащие отдельно.

"geometry": {
    "type": "LineString",
    "coordinates": [
        [80.2122116088867,13.113586344333864],
        [80.25959014892577,13.072121016365408],
        [80.29048919677733,13.114923819297273],
        [80.3207015991211,13.075799674224164],
        [80.33477783203125,13.112248862097216]
    ]
}

MultiLineString

Как видно из названия, он используется для хранения более одной LineString в одной геометрии. Каждый элемент массива Coordinates похож на один массив LineString Coordinates.

"geometry":{"type": "MultiLineString",
"coordinates" : [
[
[longitude,latitude],
[longitude,latitude],
[longitude,latitude]  
 ],
[
[longitude,latitude],
[longitude,latitude],
[longitude,latitude]  
 ],
[
[longitude,latitude],
[longitude,latitude],
[longitude,latitude]  
 ],
]}

Polygon

Спецификация RFC определяет полигоны как линейные кольца. Линейное кольцо, это многоугольники — то есть любая замкнутая форма, да буквально любая форма.

Спецификация RFC также определяет, что многоугольники закрыты. Закрытая форма означает, что первая и последняя координаты будут одинаковыми.

Они могут быть использованы для хранения границ. Будь то граница страны, города, села или границы области.

"geometry": {
    "type": "Polygon",
    "coordinates": [
        [
            [78.44238281249999,22.62415215809042],
            [77.8436279296875,22.151795575397756],
            [78.486328125,21.764601405743978],
            [79.0521240234375,22.233175265402785],
            [78.44238281249999,22.62415215809042]
        ]
    ]
}

MultiPolygon

К этому времени вы уже догадались, что, как и MultiPoint и MultiLine, MultiPolygon представляет собой набор полигонов. Вы можете использовать их для хранения информации о границах разных городов в штате.

Feature и FeatureCollection

Теперь самое интересное. До этого вы узнали, как хранить географические данные в различных структурах, таких как Points, Lines и Polygons. Но как хранить информацию об этих местах?

Правильный способ хранения географической информации — использовать Feature и FeatureCollection.

GeoJSON Feature и FeatureCollections сами по себе являются геометрией. Это своего рода описание геометрии, которая используется для хранения другой геометрии и свойств (информации) об этой геометрии.

Типичная Feature выглядит так

{
    "type": "Feature",
    "geometry": {
        "type": "Point",
        "coordinates": [-10.0,-10.0]
    },
    "properties": {
        "temperature": "4C",
        "country": "IN",
        "somepropertyName": "Some description"
    }
}

В приведенном выше GeoJSON геометрия может быть любого из типов, которые мы обсуждали ранее, например, Point, Line или Polygon, а Feature содержат данные и информацию об этой геометрии.

FeatureCollection

Как следует из названия, FeatureCollection GeoJSON содержит набор Features.

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "properties": {},
      "geometry": {
        "type": "Point",
        "coordinates": [78.31054687499999,22.39071391683855]
      }
    },
    {
      "type": "Feature",
      "properties": {},
      "geometry": {
        "type": "Point",
        "coordinates": [78.486328125,11.43695521614319]
      }
    },
    {
      "type": "Feature",
      "properties": {},
      "geometry": {
        "type": "Point",
        "coordinates": [77.9150390625,27.176469131898898]
      }
    },
    {
      "type": "Feature",
      "properties": {},
      "geometry": {
        "type": "Point",
        "coordinates": [75.673828125,19.766703551716976]
      }
    }
  ]
}

Ресурсы

  • RFC спецификация GeoJSON (https://tools.ietf.org/html/rfc7946)
  • Интерактив с GeoJSON (https://geojson.io/)
  • Лучшая библиотека JS для работами с картами (https://leafletjs.com/)
Была ли вам полезна эта статья?
[5 / 4.4]

Spread the love
OlegA

Recent Posts

Vue 3.4 Новая механика v-model компонента

Краткий перевод: https://vuejs.org/guide/components/v-model.html Основное использование​ v-model используется для реализации двусторонней привязки в компоненте. Начиная с Vue…

11 месяцев ago

Анонс Vue 3.4

Сегодня мы рады объявить о выпуске Vue 3.4 «🏀 Slam Dunk»! Этот выпуск включает в…

11 месяцев ago

Как принудительно пере-отобразить (re-render) компонент Vue

Vue.js — это универсальный и адаптируемый фреймворк. Благодаря своей отличительной архитектуре и системе реактивности Vue…

2 года ago

Проблемы с установкой сертификата на nginix

Недавно, у меня истек сертификат и пришлось заказывать новый и затем устанавливать на хостинг с…

2 года ago

Введение в JavaScript Temporal API

Каким бы ни было ваше мнение о JavaScript, но всем известно, что работа с датами…

2 года ago

Когда и как выбирать между медиа запросами и контейнерными запросами

Все, кто следит за последними событиями в мире адаптивного дизайна, согласятся, что введение контейнерных запросов…

2 года ago