Spec-Zone.ru › Django 5.2

Справочник API набора запросов GIS

Пространственные запросы

Пространственные запросы в этом разделе доступны для GeometryField и RasterField.

Для ознакомления см. введение в пространственные запросы. Для обзора того, какие запросы совместимы с конкретным пространственным бэкендом, обратитесь к таблице совместимости пространственных запросов.

Запросы с растровыми данными

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

Базовые операторы, используемые запросами, можно разделить на три категории:

  • Поддержка растровых данных на уровне ядра N: оператор напрямую принимает растровые данные с обеих сторон запроса, и растровые данные могут смешиваться с геометрическими.
  • Двусторонняя поддержка растровых данных B: оператор поддерживает растровые данные только в том случае, если на обеих сторонах запроса используются растровые данные. Растровые данные автоматически преобразуются в геометрию для смешанных запросов.
  • Поддержка преобразования геометрии C. Запрос не имеет прямой поддержки растровых данных, все растровые данные автоматически преобразуются в геометрию.

Примеры ниже показывают эквиваленты SQL для запросов в различных типах поддержки растровых данных. Такая же схема применяется ко всем пространственным запросам.

Случай

Запрос

Эквивалент SQL

N, B

rast__contains=rst

ST_Contains(rast, rst)

N, B

rast__1__contains=(rst, 2)

ST_Contains(rast, 1, rst, 2)

B, C

rast__contains=geom

ST_Contains(ST_Polygon(rast), geom)

B, C

rast__1__contains=geom

ST_Contains(ST_Polygon(rast, 1), geom)

B, C

poly__contains=rst

ST_Contains(poly, ST_Polygon(rst))

B, C

poly__contains=(rst, 1)

ST_Contains(poly, ST_Polygon(rst, 1))

C

rast__crosses=rst

ST_Crosses(ST_Polygon(rast), ST_Polygon(rst))

C

rast__1__crosses=(rst, 2)

ST_Crosses(ST_Polygon(rast, 1), ST_Polygon(rst, 2))

C

rast__crosses=geom

ST_Crosses(ST_Polygon(rast), geom)

C

poly__crosses=rst

ST_Crosses(poly, ST_Polygon(rst))

Пространственные запросы с растровыми данными поддерживаются только для бэкэндов PostGIS (обозначены как PGRaster в этом разделе).

Полное вхождение по ограничивающим прямоугольникам

Доступность: PostGIS, MariaDB, MySQL, SpatiaLite, PGRaster (Нативно)

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

Пример:

Zipcode.objects.filter(poly__bbcontains=geom)

Бэкенд

Эквивалент SQL

PostGIS

poly ~ geom

MariaDB

MBRContains(poly, geom)

MySQL

MBRContains(poly, geom)

SpatiaLite

MbrContains(poly, geom)

Пересечение по ограничивающим прямоугольникам

Доступность: PostGIS, MariaDB, MySQL, SpatiaLite, PGRaster (Нативно)

Проверяет, перекрываются ли ограничивающие прямоугольники геометрического поля и геометрии запроса.

Пример:

Zipcode.objects.filter(poly__bboverlaps=geom)

Бэкенд

Эквивалент SQL

PostGIS

poly && geom

MariaDB

MBROverlaps(poly, geom)

MySQL

MBROverlaps(poly, geom)

SpatiaLite

MbrOverlaps(poly, geom)

Вхождение

Доступность: PostGIS, MariaDB, MySQL, SpatiaLite, PGRaster (Нативно)

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

Пример:

Zipcode.objects.filter(poly__contained=geom)

Бэкенд

Эквивалент SQL

PostGIS

poly @ geom

MariaDB

MBRWithin(poly, geom)

MySQL

MBRWithin(poly, geom)

SpatiaLite

MbrWithin(poly, geom)

Содержит

Доступность: PostGIS, Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (Двусторонний)

Проверяет, содержит ли геометрическое поле геометрию запроса.

Пример:

Zipcode.objects.filter(poly__contains=geom)

Бэкенд

Эквивалент SQL

PostGIS

ST_Contains(poly, geom)

Oracle

SDO_CONTAINS(poly, geom)

MariaDB

ST_Contains(poly, geom)

MySQL

ST_Contains(poly, geom)

SpatiaLite

Contains(poly, geom)

Содержит строго

Доступность: PostGIS, PGRaster (Двусторонний)

Возвращает true, если геометрия запроса пересекает внутреннюю часть геометрического поля, но не границу (или внешнюю часть).

Пример:

Zipcode.objects.filter(poly__contains_properly=geom)

Бэкенд

Эквивалент SQL

PostGIS

ST_ContainsProperly(poly, geom)

Покрывается

Доступность: PostGIS, Oracle, MySQL, PGRaster (Двусторонний), SpatiaLite

Проверяет, что ни одна точка в геометрическом поле не находится за пределами геометрии запроса. [3]

Пример:

Zipcode.objects.filter(poly__coveredby=geom)

Бэкенд

Эквивалент SQL

PostGIS

ST_CoveredBy(poly, geom)

Oracle

SDO_COVEREDBY(poly, geom)

MySQL

MBRCoveredBy(poly, geom)

SpatiaLite

CoveredBy(poly, geom)

Изменено в Django 5.2:

Добавлена поддержка MySQL.

Покрывает

Доступность: PostGIS, Oracle, MySQL, PGRaster (Двусторонний), SpatiaLite

Проверяет, что ни одна точка в геометрии запроса не находится за пределами геометрического поля. [3]

Пример:

Zipcode.objects.filter(poly__covers=geom)

Бэкенд

Эквивалент SQL

PostGIS

ST_Covers(poly, geom)

Oracle

SDO_COVERS(poly, geom)

MySQL

MBRCovers(poly, geom)

SpatiaLite

Covers(poly, geom)

Изменено в Django 5.2:

Добавлена поддержка MySQL.

Пересекает

Доступность: PostGIS, MariaDB, MySQL, SpatiaLite, PGRaster (Преобразование)

Проверяет, пересекает ли геометрическое поле геометрию запроса.

Пример:

Zipcode.objects.filter(poly__crosses=geom)

Бэкенд

Эквивалент SQL

PostGIS

ST_Crosses(poly, geom)

MariaDB

ST_Crosses(poly, geom)

MySQL

ST_Crosses(poly, geom)

SpatiaLite

Crosses(poly, geom)

disjoint

Доступность: PostGIS, Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (Взаимно)

Проверяет, является ли геометрическое поле пространственно непересекающимся с геометрией поиска.

Пример:

Zipcode.objects.filter(poly__disjoint=geom)

Бэкенд

SQL эквивалент

PostGIS

ST_Disjoint(poly, geom)

Oracle

SDO_GEOM.RELATE(poly, 'DISJOINT', geom, 0.05)

MariaDB

ST_Disjoint(poly, geom)

MySQL

ST_Disjoint(poly, geom)

SpatiaLite

Disjoint(poly, geom)

equals

Доступность: PostGIS, Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (Преобразование)

Проверяет, является ли геометрическое поле пространственно равным геометрии поиска.

Пример:

Zipcode.objects.filter(poly__equals=geom)

Бэкенд

SQL эквивалент

PostGIS

ST_Equals(poly, geom)

Oracle

SDO_EQUAL(poly, geom)

MariaDB

ST_Equals(poly, geom)

MySQL

ST_Equals(poly, geom)

SpatiaLite

Equals(poly, geom)

exact, same_as

Доступность: PostGIS, Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (Взаимно)

Проверяет, «равно» ли геометрическое поле геометрии поиска. В Oracle, MySQL и SpatiaLite проверяется пространственное равенство, а в PostGIS проверяется равенство ограничивающих прямоугольников.

Пример:

Zipcode.objects.filter(poly=geom)

Бэкенд

SQL эквивалент

PostGIS

poly ~= geom

Oracle

SDO_EQUAL(poly, geom)

MariaDB

ST_Equals(poly, geom)

MySQL

ST_Equals(poly, geom)

SpatiaLite

Equals(poly, geom)

intersects

Доступность: PostGIS, Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (Взаимно)

Проверяет, пересекается ли геометрическое поле с геометрией поиска.

Пример:

Zipcode.objects.filter(poly__intersects=geom)

Бэкенд

SQL эквивалент

PostGIS

ST_Intersects(poly, geom)

Oracle

SDO_OVERLAPBDYINTERSECT(poly, geom)

MariaDB

ST_Intersects(poly, geom)

MySQL

ST_Intersects(poly, geom)

SpatiaLite

Intersects(poly, geom)

isempty

Доступность: PostGIS

Проверяет, пуста ли геометрия.

Пример:

Zipcode.objects.filter(poly__isempty=True)

isvalid

Доступность: MySQL, PostGIS, Oracle, SpatiaLite

Проверяет, является ли геометрия валидной.

Пример:

Zipcode.objects.filter(poly__isvalid=True)

Бэкенд

SQL эквивалент

MySQL, PostGIS, SpatiaLite

ST_IsValid(poly)

Oracle

SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(poly, 0.05) = 'TRUE'

overlaps

Доступность: PostGIS, Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (Взаимно)

Проверяет, перекрывается ли геометрическое поле геометрией поиска.

Бэкенд

SQL эквивалент

PostGIS

ST_Overlaps(poly, geom)

Oracle

SDO_OVERLAPS(poly, geom)

MariaDB

ST_Overlaps(poly, geom)

MySQL

ST_Overlaps(poly, geom)

SpatiaLite

Overlaps(poly, geom)

relate

Доступность: PostGIS, MariaDB, Oracle, SpatiaLite, PGRaster (Преобразование)

Проверяет, связана ли геометрия поля с геометрией поиска по заданным значениям в шаблоне. Этот поиск требует параметр кортежа, (geom, pattern); форма pattern будет зависеть от пространственного бэкенда:

MariaDB, PostGIS и SpatiaLite

В этих пространственных бэкендах шаблон пересечения — это строка из девяти символов, определяющих пересечения внутренней, граничной и внешней части геометрического поля и геометрии поиска. Матрица шаблона пересечения может использовать только следующие символы: 1, 2, T, F или *. Этот тип поиска позволяет пользователям «точно настроить» определённое геометрическое отношение, согласующееся с моделью DE-9IM. [1]

Пример геометрии:

# A tuple lookup parameter is used to specify the geometry and
# the intersection pattern (the pattern here is for 'contains').
Zipcode.objects.filter(poly__relate=(geom, "T*T***FF*"))

Эквивалент SQL для PostGIS и MariaDB:

SELECT ... WHERE ST_Relate(poly, geom, 'T*T***FF*')

Эквивалент SQL для SpatiaLite:

SELECT ... WHERE Relate(poly, geom, 'T*T***FF*')

Пример растра:

Zipcode.objects.filter(poly__relate=(rast, 1, "T*T***FF*"))
Zipcode.objects.filter(rast__2__relate=(rast, 1, "T*T***FF*"))

Эквивалент SQL для PostGIS:

SELECT ... WHERE ST_Relate(poly, ST_Polygon(rast, 1), 'T*T***FF*')
SELECT ... WHERE ST_Relate(ST_Polygon(rast, 2), ST_Polygon(rast, 1), 'T*T***FF*')

Oracle

Здесь шаблон соотношения состоит по крайней мере из одной из девяти строк соотношений: TOUCH, OVERLAPBDYDISJOINT, OVERLAPBDYINTERSECT, EQUAL, INSIDE, COVEREDBY, CONTAINS, COVERS, ON и ANYINTERACT. Несколько строк могут быть объединены логическим булевым оператором ИЛИ, например, 'inside+touch'. [2] Строки соотношения нечувствительны к регистру.

Пример:

Zipcode.objects.filter(poly__relate=(geom, "anyinteract"))

Эквивалент SQL для Oracle:

SELECT ... WHERE SDO_RELATE(poly, geom, 'anyinteract')

touches

Доступность: PostGIS, Oracle, MariaDB, MySQL, SpatiaLite

Проверяет, касается ли геометрическое поле геометрии поиска.

Пример:

Zipcode.objects.filter(poly__touches=geom)

Бэкенд

SQL эквивалент

PostGIS

ST_Touches(poly, geom)

MariaDB

ST_Touches(poly, geom)

MySQL

ST_Touches(poly, geom)

Oracle

SDO_TOUCH(poly, geom)

SpatiaLite

Touches(poly, geom)

within

Доступность: PostGIS, Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (Взаимно)

Проверяет, находится ли геометрическое поле внутри геометрии поиска.

Пример:

Zipcode.objects.filter(poly__within=geom)

Бэкенд

SQL эквивалент

PostGIS

ST_Within(poly, geom)

MariaDB

ST_Within(poly, geom)

MySQL

ST_Within(poly, geom)

Oracle

SDO_INSIDE(poly, geom)

SpatiaLite

Within(poly, geom)

left

Доступность: PostGIS, PGRaster (Преобразование)

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

Пример:

Zipcode.objects.filter(poly__left=geom)

Эквивалент PostGIS:

SELECT ... WHERE poly << geom

right

Доступность: PostGIS, PGRaster (Преобразование)

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

Пример:

Zipcode.objects.filter(poly__right=geom)

Эквивалент PostGIS:

SELECT ... WHERE poly >> geom

overlaps_left

Доступность: PostGIS, PGRaster (Взаимно)

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

Пример:

Zipcode.objects.filter(poly__overlaps_left=geom)

Эквивалент PostGIS:

SELECT ... WHERE poly &< geom

overlaps_right

Доступность: PostGIS, PGRaster (Взаимная)

Проверяет, пересекается ли прямоугольник окружающего поля геометрии или находится справа от прямоугольника окружающего поля геометрии-ключа.

Пример:

Zipcode.objects.filter(poly__overlaps_right=geom)

Эквивалент PostGIS:

SELECT ... WHERE poly &> geom

overlaps_above

Доступность: PostGIS, PGRaster (Преобразование)

Проверяет, пересекается ли прямоугольник окружающего поля геометрии или находится сверху прямоугольника окружающего поля геометрии-ключа.

Пример:

Zipcode.objects.filter(poly__overlaps_above=geom)

Эквивалент PostGIS:

SELECT ... WHERE poly |&> geom

overlaps_below

Доступность: PostGIS, PGRaster (Преобразование)

Проверяет, пересекается ли прямоугольник окружающего поля геометрии или находится снизу прямоугольника окружающего поля геометрии-ключа.

Пример:

Zipcode.objects.filter(poly__overlaps_below=geom)

Эквивалент PostGIS:

SELECT ... WHERE poly &<| geom

strictly_above

Доступность: PostGIS, PGRaster (Преобразование)

Проверяет, находится ли прямоугольник окружающего поля геометрии строго выше прямоугольника окружающего поля геометрии-ключа.

Пример:

Zipcode.objects.filter(poly__strictly_above=geom)

Эквивалент PostGIS:

SELECT ... WHERE poly |>> geom

strictly_below

Доступность: PostGIS, PGRaster (Преобразование)

Проверяет, находится ли прямоугольник окружающего поля геометрии строго ниже прямоугольника окружающего поля геометрии-ключа.

Пример:

Zipcode.objects.filter(poly__strictly_below=geom)

Эквивалент PostGIS:

SELECT ... WHERE poly <<| geom

Поиск по расстоянию

Доступность: PostGIS, Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (Нативный)

Для обзора выполнения запросов по расстоянию, обратитесь к введению в запросы по расстоянию.

Поиск по расстоянию имеет следующий вид:

<field>__<distance lookup>=(<geometry/raster>, <distance value>[, "spheroid"])
<field>__<distance lookup>=(<raster>, <band_index>, <distance value>[, "spheroid"])
<field>__<band_index>__<distance lookup>=(<raster>, <band_index>, <distance value>[, "spheroid"])

Значение, переданное в поиск по расстоянию, является кортежем; первые два значения являются обязательными и представляют собой геометрию для расчета расстояний и значение расстояния (либо число в единицах поля, объект Distance, либо выражение запроса). Для передачи индекса полосы в поиск используйте кортеж из 3 элементов, где вторым элементом является индекс полосы.

Во всех поисках по расстоянию, кроме dwithin, может быть включён необязательный элемент 'spheroid', чтобы использовать функции расчёта расстояния по эллипсоиду с большей точностью для полей с геодезической системой координат.

В PostgreSQL, опция 'spheroid' использует ST_DistanceSpheroid вместо ST_DistanceSphere. Более простая функция ST_Distance используется с проекционными системами координат. Растровые данные конвертируются в геометрии для расчётов по эллипсоиду.

distance_gt

Возвращает модели, где расстояние до поля геометрии от геометрии-ключа больше заданного значения расстояния.

Пример:

Zipcode.objects.filter(poly__distance_gt=(geom, D(m=5)))

Бэкенд

Эквивалент SQL

PostGIS

ST_Distance/ST_Distance_Sphere(poly, geom) > 5

MariaDB

ST_Distance(poly, geom) > 5

MySQL

ST_Distance(poly, geom) > 5

Oracle

SDO_GEOM.SDO_DISTANCE(poly, geom, 0.05) > 5

SpatiaLite

Distance(poly, geom) > 5

distance_gte

Возвращает модели, где расстояние до поля геометрии от геометрии-ключа больше или равно заданному значению расстояния.

Пример:

Zipcode.objects.filter(poly__distance_gte=(geom, D(m=5)))

Бэкенд

Эквивалент SQL

PostGIS

ST_Distance/ST_Distance_Sphere(poly, geom) >= 5

MariaDB

ST_Distance(poly, geom) >= 5

MySQL

ST_Distance(poly, geom) >= 5

Oracle

SDO_GEOM.SDO_DISTANCE(poly, geom, 0.05) >= 5

SpatiaLite

Distance(poly, geom) >= 5

distance_lt

Возвращает модели, где расстояние до поля геометрии от геометрии-ключа меньше заданного значения расстояния.

Пример:

Zipcode.objects.filter(poly__distance_lt=(geom, D(m=5)))

Бэкенд

Эквивалент SQL

PostGIS

ST_Distance/ST_Distance_Sphere(poly, geom) < 5

MariaDB

ST_Distance(poly, geom) < 5

MySQL

ST_Distance(poly, geom) < 5

Oracle

SDO_GEOM.SDO_DISTANCE(poly, geom, 0.05) < 5

SpatiaLite

Distance(poly, geom) < 5

distance_lte

Возвращает модели, где расстояние до поля геометрии от геометрии-ключа меньше или равно заданному значению расстояния.

Пример:

Zipcode.objects.filter(poly__distance_lte=(geom, D(m=5)))

Бэкенд

Эквивалент SQL

PostGIS

ST_Distance/ST_Distance_Sphere(poly, geom) <= 5

MariaDB

ST_Distance(poly, geom) <= 5

MySQL

ST_Distance(poly, geom) <= 5

Oracle

SDO_GEOM.SDO_DISTANCE(poly, geom, 0.05) <= 5

SpatiaLite

Distance(poly, geom) <= 5

dwithin

Возвращает модели, где расстояние до поля геометрии от геометрии-ключа находится в пределах заданного расстояния друг от друга. Обратите внимание, что вы можете указать только объекты Distance, если целевые геометрии находятся в проекционной системе. Для геодезических геометрий вы должны использовать единицы поля геометрии (например, градусы для WGS84).

Пример:

Zipcode.objects.filter(poly__dwithin=(geom, D(m=5)))

Бэкенд

Эквивалент SQL

PostGIS

ST_DWithin(poly, geom, 5)

Oracle

SDO_WITHIN_DISTANCE(poly, geom, 5)

SpatiaLite

PtDistWithin(poly, geom, 5)

Функции агрегирования

Django предоставляет некоторые функции агрегирования, специфичные для геоданных. Подробнее о том, как использовать эти функции агрегирования, см. руководство по теме агрегирования.

Ключевое слово

Описание

tolerance

Это ключевое слово только для Oracle. Оно предназначено для значения допуска, используемого процедурой SDOAGGRTYPE; более подробная информация содержится в документации Oracle.

Пример:

>>> from django.contrib.gis.db.models import Extent, Union
>>> WorldBorder.objects.aggregate(Extent("mpoly"), Union("mpoly"))

Collect

class Collect(geo_field, filter=None) [source]

Доступность: PostGIS, MySQL, SpatiaLite

Возвращает объект геометрии типа GEOMETRYCOLLECTION или MULTI из столбца геометрии. Это аналогично упрощенной версии агрегата Union, но может быть на несколько порядков быстрее, чем выполнение объединения, поскольку он объединяет геометрии в коллекцию или многообъектный объект, не заботясь о растворении границ.

Изменено в Django 5.1:

Добавлена поддержка MySQL 8.0.24+.

Extent

class Extent(geo_field, filter=None) [source]

Доступность: PostGIS, Oracle, SpatiaLite

Возвращает область всех geo_field в QuerySet как 4-кортеж, включающий координаты нижнего левого и верхнего правого углов.

Пример:

>>> qs = City.objects.filter(name__in=("Houston", "Dallas")).aggregate(Extent("poly"))
>>> print(qs["poly__extent"])
(-96.8016128540039, 29.7633724212646, -95.3631439208984, 32.782058715820)

Extent3D

class Extent3D(geo_field, filter=None) [source]

Доступность: PostGIS

Возвращает 3D область всех geo_field в QuerySet как 6-кортеж, включающий координаты нижнего левого и верхнего правого углов (каждая с координатами x, y и z).

Пример:

>>> qs = City.objects.filter(name__in=("Houston", "Dallas")).aggregate(Extent3D("poly"))
>>> print(qs["poly__extent3d"])
(-96.8016128540039, 29.7633724212646, 0, -95.3631439208984, 32.782058715820, 0)

MakeLine

class MakeLine(geo_field, filter=None) [source]

Доступность: PostGIS, SpatiaLite

Возвращает LineString, построенный из геометрий поля точек в QuerySet. В настоящее время порядок запроса не влияет на результат.

Пример:

>>> qs = City.objects.filter(name__in=("Houston", "Dallas")).aggregate(MakeLine("poly"))
>>> print(qs["poly__makeline"])
LINESTRING (-95.3631510000000020 29.7633739999999989, -96.8016109999999941 32.7820570000000018)

Union

class Union(geo_field, filter=None) [source]

Доступность: PostGIS, Oracle, SpatiaLite

Этот метод возвращает объект GEOSGeometry, представляющий объединение всех геометрий в наборе запросов. Обратите внимание, что использование Union является ресурсоемким процессом и может занимать значительное время на больших наборах запросов.

Примечание

Если время вычислений для использования этого метода слишком велико, рассмотрите использование Collect вместо него.

Пример:

>>> u = Zipcode.objects.aggregate(Union(poly))  # This may take a long time.
>>> u = Zipcode.objects.filter(poly__within=bbox).aggregate(
...     Union(poly)
... )  # A more sensible approach.

Примечания

[1]

См. OpenGIS Simple Feature Specification For SQL, в разделе 2.1.13.2, стр. 2-13 (Модель пересечения девяти точек с расширением по размерности).

[2]

См. документацию SDO_RELATE из Руководства разработчика Oracle Spatial and Graph.

[3] (1,2)

Для объяснения этой процедуры, прочтите Особенности пространственного предиката «Содержит» Мартина Дэвиса (разработчика PostGIS).

© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/5.2/ref/contrib/gis/geoquerysets/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API