Формат geojson что это

Утилита Google Maps Android GeoJSON

Введение

Как добавить слой GeoJsonLayer на карту

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

Для импорта данных из объекта JSONObject вам понадобятся:

Kotlin

Для импорта данных из локального файла GeoJSON вам понадобятся:

Kotlin

Kotlin

Как удалить слой GeoJsonLayer

Предположим, что вы добавили этот слой:

Kotlin

Kotlin

Как добавить или удалить объект GeoJsonFeature

Географический элемент в GeoJSON имеет тип feature. Он содержит геометрические данные и элемент свойства, а также может содержать ограничивающий прямоугольник или идентификатор.

Предположим, что вы создали географический объект, который содержит точку с координатами 0, 0, имеет одну запись в свойствах и не имеет ограничивающего прямоугольника.

Kotlin

Чтобы добавить этот географический объект в слой, вызовите метод addFeature() и передайте ему этот объект.

Kotlin

Чтобы удалить объект после того, как он был добавлен в слой, вызовите метод removeFeature() и передайте ему этот объект.

Kotlin

Доступ к элементам GeoJsonFeature и их свойства

Kotlin

С помощью методов hasProperty() и getProperty() в сочетании с методом getFeatures() вы можете проверить, есть ли у каждого сохраненного объекта определенное свойство, и получить к нему доступ, если оно существует.

Kotlin

События кликов по фигурам GeoJSON

С помощью метода GeoJsonLayer.OnFeatureClickListener() можно прослушивать события кликов по геометрическим объектам на карте. В приведенном ниже примере кода реализовано сохранение названия объекта на карте при клике по этому объекту.

Kotlin

Как настроить стиль для GeoJsonLayer и GeoJsonFeature

Для слоя GeoJsonLayer можно выбрать стили по умолчанию или определить стиль для его отдельных элементов.

Стили по умолчанию

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

Ниже приведены инструкции по настройке стиля по умолчанию.

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

Kotlin

Стили для конкретных объектов GeoJsonFeature

Kotlin

Демонстрационное приложение

Пример импорта файла GeoJSON из указанного URL и создания слоя с помощью этого файла представлен в коде GeoJsonDemoActivity демонстрационного приложения из библиотеки утилит. В руководстве по настройке рассказывается, как запустить демонстрационное приложение.

Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.

Источник

Работа с GeoJSON в среде Node.js: практическое знакомство

GeoJSON — это стандартизованный формат представления географических структур данных, основанный на JSON. Существует множество замечательных инструментов для визуализации GeoJSON-данных. При этом данный формат хорош не только в деле хранения координат неких точек. Он, помимо точек, позволяет описывать и другие объекты: линии, полигоны, коллекции объектов.

Формат geojson что это. Смотреть фото Формат geojson что это. Смотреть картинку Формат geojson что это. Картинка про Формат geojson что это. Фото Формат geojson что это

Точки — объекты Point

Эта точка представляет парк в Майами-Бич, штат Флорида, США. Визуализировать эту точку на карте легко можно с помощью проекта geojson.io.

Формат geojson что это. Смотреть фото Формат geojson что это. Смотреть картинку Формат geojson что это. Картинка про Формат geojson что это. Фото Формат geojson что это

Типичный пример использования точек GeoJSON — геокодирование — преобразование адресов наподобие «429 Lenox Ave, Miami Beach, FL» в координаты, выраженные долготой и широтой. Например, мы пользуемся API геокодирования Mapbox. Для обращения к этому API нужно выполнить HTTP-запрос к следующей конечной точке:

В ответ придёт такой код:

Если присмотреться к ответу, то окажется, что features[0].geometry в JSON-коде — это GeoJSON-точка:

Формат geojson что это. Смотреть фото Формат geojson что это. Смотреть картинку Формат geojson что это. Картинка про Формат geojson что это. Фото Формат geojson что это

API статических карт Mapbox — это отличный инструмент для вывода точек на картах. Ниже показан скрипт, который декодирует переданную ему строку и возвращает URL на изображение, которое показывает первый результат поиска.

Формат geojson что это. Смотреть фото Формат geojson что это. Смотреть картинку Формат geojson что это. Картинка про Формат geojson что это. Фото Формат geojson что это

Пример визуализации точки на карте

Линии — объекты LineString

Формат geojson что это. Смотреть фото Формат geojson что это. Смотреть картинку Формат geojson что это. Картинка про Формат geojson что это. Фото Формат geojson что это

Визуализация объекта LineString на карте

Линии, при использовании API навигации наподобие Mapbox, применяются для визуализации поэтапного пути между двумя точками. Один из способов представления автомобильного пути из точки [-80.139145,25.77409] (офис WeWork в Майами-Бич) до точки [-80.2752743,25.7938434] (международный аэропорт Майами) заключается в использовании GeoJSON-объекта LineString :

Формат geojson что это. Смотреть фото Формат geojson что это. Смотреть картинку Формат geojson что это. Картинка про Формат geojson что это. Фото Формат geojson что это

Путь из одной точки в другую

Полигоны — объекты Polygon

Формат geojson что это. Смотреть фото Формат geojson что это. Смотреть картинку Формат geojson что это. Картинка про Формат geojson что это. Фото Формат geojson что это

Визуализация полигона на карте

GeoJSON-полигоны могут использоваться для описания очень сложных форм. Например, некоторое время в Uber использовался единственный GeoJSON-полигон, включающий в себя все 3 основных аэропорта области залива Сан-Франциско.

Формат geojson что это. Смотреть фото Формат geojson что это. Смотреть картинку Формат geojson что это. Картинка про Формат geojson что это. Фото Формат geojson что это

Правда, надо отметить, GeoJSON-полигоны не могут представлять окружности и эллипсы.

Для чего используются полигоны? Обычно — для описания геозон. Например, представьте себе, что работаете в Uber или в Lyft. Вам нужно показать пользователям, заказывающим поездки из аэропорта, особый экран. Для того чтобы это сделать, нужно будет узнать, находится ли точка, из которой заказывают поездку, в пределах полигона, описывающего аэропорт (или несколько аэропортов как на предыдущем рисунке).

Один из способов проверки нахождения GeoJSON-точки в пределах полигона заключается в использовании npm-модуля Turf. Модуль @turf/boolean-point-in-polygon позволяет узнать о том, находится ли точка в пределах полигона.

Итоги

GeoJSON — это не только хранение координат точек. В этом формате можно хранить пути. С использованием GeoJSON-данных можно выяснить момент попадания пользователя в геозону. А если нужно, то GeoJSON даже позволяет создавать изохроны. Вокруг формата GeoJSON сформировался набор отличных инструментов. Так, ресурс geojson.io позволяет выполнять простые визуализации координат на карте. Проект Mapbox даёт доступ к продвинутым географическим API. Пакет Turf позволяет выполнять геопространственные вычисления в браузерах и в среде Node.js.

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

Уважаемые читатели! Пользуетесь ли вы форматом GeoJSON?

Источник

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

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

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

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

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

Введение

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

Содержание

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

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

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

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

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

Координаты

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

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

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

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

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

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

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

Point

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

Формат geojson что это. Смотреть фото Формат geojson что это. Смотреть картинку Формат geojson что это. Картинка про Формат geojson что это. Фото Формат geojson что это

MultiPoint

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

Формат geojson что это. Смотреть фото Формат geojson что это. Смотреть картинку Формат geojson что это. Картинка про Формат geojson что это. Фото Формат geojson что это

LineString

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

Формат geojson что это. Смотреть фото Формат geojson что это. Смотреть картинку Формат geojson что это. Картинка про Формат geojson что это. Фото Формат geojson что это

MultiLineString

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

Polygon

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

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

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

Формат geojson что это. Смотреть фото Формат geojson что это. Смотреть картинку Формат geojson что это. Картинка про Формат geojson что это. Фото Формат geojson что это

MultiPolygon

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

Feature и FeatureCollection

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

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

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

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

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

FeatureCollection

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

Источник

This document is obsolete. Please see RFC 7946 instead.

AuthorsHoward Butler (Hobu Inc.), Martin Daly (Cadcorp), Allan Doyle (MIT), Sean Gillies (UNC-Chapel Hill), Tim Schaub (OpenGeo), Christopher Schmidt (MetaCarta)
Revision1.0
Date16 June 2008
AbstractGeoJSON is a geospatial data interchange format based on JavaScript Object Notation (JSON).
CopyrightCopyright © 2008 by the Authors. This work is licensed under a Creative Commons Attribution 3.0 United States License.
StatusObsolete. Replaced by RFC 7946.

1. Introduction

GeoJSON is a format for encoding a variety of geographic data structures. A GeoJSON object may represent a geometry, a feature, or a collection of features. GeoJSON supports the following geometry types: Point, LineString, Polygon, MultiPoint, MultiLineString, MultiPolygon, and GeometryCollection. Features in GeoJSON contain a geometry object and additional properties, and a feature collection represents a list of features.

1.1. Examples

A GeoJSON feature collection:

1.2. Definitions

JavaScript Object Notation (JSON), and the terms object, name, value, array, and number, are defined in IETF RFC 4627.

The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in IETF RFC 2119.

2. GeoJSON Objects

GeoJSON always consists of a single object. This object (referred to as the GeoJSON object below) represents a geometry, feature, or collection of features.

The GeoJSON object may have any number of members (name/value pairs).

A GeoJSON object may have an optional «crs» member, the value of which must be a coordinate reference system object (see 3. Coordinate Reference System Objects).

A GeoJSON object may have a «bbox» member, the value of which must be a bounding box array (see 4. Bounding Boxes).

2.1 Geometry Objects

2.1.1. Positions

A position is the fundamental geometry construct. The «coordinates» member of a geometry object is composed of one position (in the case of a Point geometry), an array of positions (LineString or MultiPoint geometries), an array of arrays of positions (Polygons, MultiLineStrings), or a multidimensional array of positions (MultiPolygon).

A position is represented by an array of numbers. There must be at least two elements, and may be more. The order of elements must follow x, y, z order (easting, northing, altitude for coordinates in a projected coordinate reference system, or longitude, latitude, altitude for coordinates in a geographic coordinate reference system). Any number of additional elements are allowed – interpretation and meaning of additional elements is beyond the scope of this specification.

Examples of positions and geometries are provided in Appendix A. Geometry Examples.

2.1.2. Point

2.1.3. MultiPoint

2.1.4. LineString

A LinearRing is closed LineString with 4 or more positions. The first and last positions are equivalent (they represent equivalent points). Though a LinearRing is not explicitly represented as a GeoJSON geometry type, it is referred to in the Polygon geometry type definition.

2.1.5. MultiLineString

2.1.6. Polygon

2.1.7. MultiPolygon

2.1.8 Geometry Collection

A GeoJSON object with type «GeometryCollection» is a geometry object which represents a collection of geometry objects.

2.2. Feature Objects

A GeoJSON object with the type «Feature» is a feature object.

2.3. Feature Collection Objects

A GeoJSON object with the type «FeatureCollection» is a feature collection object.

3. Coordinate Reference System Objects

The coordinate reference system (CRS) of a GeoJSON object is determined by its «crs» member (referred to as the CRS object below). If an object has no crs member, then its parent or grandparent object’s crs member may be acquired. If no crs member can be so acquired, the default CRS shall apply to the GeoJSON object.

The default CRS is a geographic coordinate reference system, using the WGS84 datum, and with longitude and latitude units of decimal degrees.

The value of a member named «crs» must be a JSON object (referred to as the CRS object below) or JSON null. If the value of CRS is null, no CRS can be assumed.

The crs member should be on the top-level GeoJSON object in a hierarchy (in feature collection, feature, geometry order) and should not be repeated or overridden on children or grandchildren of the object.

The value of the type member must be a string, indicating the type of CRS object.

The value of the properties member must be an object.

CRS shall not change coordinate ordering (see 2.1.1. Positions).

3.1. Named CRS

3.2. Linked CRS

3.2.1. Link Objects

The value of the required «href» member must be a dereferenceable URI.

Relative links may be used to direct processors to CRS parameters in an auxiliary file:

4. Bounding Boxes

Example of a bbox member on a feature:

Example of a bbox member on a feature collection:

Appendix A. Geometry Examples

Each of the examples below represents a complete GeoJSON object. Note that unquoted whitespace is not significant in JSON. Whitespace is used in the examples to help illustrate the data structures, but is not required.

Point

Point coordinates are in x, y order (easting, northing for projected coordinates, longitude, latitude for geographic coordinates):

LineString

Coordinates of LineString are an array of positions (see 2.1.1. Positions):

Polygon

Coordinates of a Polygon are an array of LinearRing coordinate arrays. The first element in the array represents the exterior ring. Any subsequent elements represent interior rings (or holes).

MultiPoint

Coordinates of a MultiPoint are an array of positions:

MultiLineString

Coordinates of a MultiLineString are an array of LineString coordinate arrays:

MultiPolygon

Coordinates of a MultiPolygon are an array of Polygon coordinate arrays:

GeometryCollection

Each element in the geometries array of a GeometryCollection is one of the geometry objects described above:

Источник

GIS-LAB

Географические информационные системы и дистанционное зондирование

Спецификация формата GeoJSON

Перевод спецификации формата GeoJSON.

Авторы

Howard Butler (Hobu Inc.), Martin Daly (Cadcorp), Allan Doyle (MIT), Sean Gillies (UNC-Chapel Hill), Tim Schaub (OpenGeo), Christopher Schmidt (MetaCarta)

Версия

Копирайт

Copyright © 2008 by the Authors. This work is licensed under a Creative Commons Attribution 3.0 United States License

Кратко

Перевод

Рыков Д.А., а также участники форума, участвовашие в редактировании перевода: Дубинин М.Ю, Mavka, gamm

Ссылка

Оглавление

1. Введение

Примечание переводчика: в GeoJSON существует иерархия объектов вида GeoJSON Object => feature collection => feature => geometry. Чтобы в дальнейшем избежать путаницы в терминах, условимся называть GeoJSON Object – объект GeoJSON, feature collection – коллекция элементарных объектов, feature – элементарный объект, geometry – геометрия.

Завершенная структура данных GeoJSON – это всегда объект (в терминах JSON). В GeoJSON объект состоит из набора пар ключ/значение, также называемых свойствами. Имя каждого свойства – строка. Значение свойства может представлять собой строку, число, объект, массив или один из литералов: «true», «false» и «null». Массив состоит из элементов, где каждый элемент может принимать одно из значений, описанных выше.

1.1 Примеры

Коллекция элементарных объектов GeoJSON:

1.2 Определения

2. Объекты GeoJSON

GeoJSON всегда представляет собой единственную сущность: геометрию, элементарный объект или коллекцию элементарных объектов.

2.1 Геометрия

Геометрия – это объект GeoJSON, для которого в качестве значения свойства «type» используется одна из строк: «Point», «MultiPoint», «LineString», «MultiLineString», «Polygon», «MultiPolygon» или «GeometryCollection».

Все геометрии, тип которых отличен от «Geometry Collection», должны иметь свойство «coordinates». Значение данного свойства всегда представляет собой массив. Структура элементов массива определяется типом геометрии.

2.1.1 Координаты

Координаты – фундаментальная геометрическая концепция. Свойство «coordinates» объекта геометрия состоит из пары/триплета координат (в случае геометрии типа «Point»), массива координат (объекты типа «LineString» или «MultiPoint»), массива массивов координат (объекты типа «Polygons», «MultiLineStrings») или многомерного массива координат (объекты типа «MultiPolygon»).

Примеры координат и объектов геометрия приведены в Приложении A. Примеры геометрий.

2.1.2 Point

Для объектов типа «Point» свойство «coordinates» должно содержать одну пару/триплет координат.

2.1.3 MultiPoint

Для объектов типа «MultiPoint» свойство «coordinates» должно содержать массив пар/триплетов координат.

2.1.4 LineString

2.1.5 MultiLineString

Для объектов типа «MultiLineString» свойство «coordinates» должно содержать массив массивов пар/триплетов координат «LineString».

2.1.6 Polygon

Для объектов типа «Polygon» свойство «coordinates» должно содержать массив массивов пар/триплетов координат «LinearRing». Для полигонов с несколькими кольцами первым должно идти описание внешнего кольца и только затем внутренних, или дырок.

2.1.7 MultiPolygon

Для объектов типа «MultiPolygon» свойство «coordinates» должно содержать массив массивов пар/триплетов координат «Polygon».

2.1.8 GeometryCollection

2.2 Элементарный объект

2.3 Коллекция элементарных объектов

3. Объекты системы координат

Система координат (CRS) объекта GeoJSON определяется значением свойства «crs» (далее по тексту – объект CRS). Если объект GeoJSON не имеет свойства «crs», оно может быть наследовано от родительского или прародительского объекта. Если значение «crs» не может быть определено, то к GeoJSON объекту применяется значение CRS по умолчанию.

3.1 Именование систем координат

Система координат может быть описана путём указания имени. В этом случае значение свойства «type» должно содержать строку «name». Значение свойства «properties» должно представлять объект, содержащий свойство «name». Значением свойства «name» должна быть строка, определяющая систему координат. Предпочтительней использовать идентификаторы проекций OGC CRS URN вместо таких идентификаторов, как «EPSG:4326».

3.2 Ссылки на системы координат

Параметры объекта CRS могут быть получены по сети. В этом случае значение свойства «type» должно быть «link», а свойство «properties» представлять собой объект Link (см. 3.2.1 Объекты Link).

3.2.1 Объекты Link

Объект Link имеет одно обязательное свойство: «href» и одно опциональное: «type». Значение свойства «href» должно представлять собой разрешимый URI. Значение опционального свойства «type» должно быть строкой, описывающей формат представления системы координат, предоставляемой по URI. Предлагаемые значения: «proj4», «ogcwkt», «esriwkt», но могут использоваться и другие значения.

Относительные ссылки можно использовать для непосредственного доступа к параметрам системы координат, хранящимся во вспомогательном файле:

4. Ограничивающие прямоугольники

Чтобы включить информацию о диапазоне координат для геометрий, элементарных объектов и коллекций элементарных объектов используется свойство «bbox» (ограничивающий прямоугольник) объекта GeoJSON. Значение данного свойства должно быть массивом размерности 2*n, где n – размерность входящих в объект геометрий и содержать минимальные и максимальные значения координат всех координатных осей. Порядок осей при описании ограничивающего прямоугольника соответствует порядку осей, используемых при описании геометрий. Кроме того, предполагается, что система координат ограничивающего прямоугольника соответствует системе координат объекта GeoJSON, свойством которого она является.

Пример свойства «bbox» элементарного объекта:

Пример свойства «bbox» коллекции элементарных объектов:

Приложение А. Примеры геометрий

Каждый из приведенных далее примеров представляет собой законченный GeoJSON объект. Отметим, что не обрамленные в кавычки пробелы в JSON не принципиальны. Пробелы использованы в примерах для наглядности представления структуры данных и не являются обязательными.

Point

Координаты объекта Point идут в порядке x, y (смещение на восток, смещение на север для прямоугольных систем координат и долгота, широта для географических системы координат):

LineString

Координаты LineString – массив пар/триплетов координат (см. 2.1.1. Координаты):

Polygon

Координаты Polygon – массив массивов пар/триплетов координат LinearRing. Первый элемент массива описывает внешнее кольцо. Последующие элементы описывают внутренние кольца (дырки).

MultiPoint

Координаты MultiPoint – массив пар/триплетов координат:

MultiLineString

Координаты MultiLinestring – массив массивов пар/триплетов координат LineString:

MultiPolygon

Координаты MultiPolygon – массив массивов пар/триплетов координат Polygon:

GeometryCollection

Каждый элемент в массиве GeometryCollection – геометрия:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *