Статья знакомит вас с пространственной базой данных PostGIS.
Статья знакомит вас с пространственной базой данных PostGIS.
Статья знакомит вас с пространственной базой данных PostGIS.

1. Введение в пространственную базу данных

1. Что такое пространственная база данных?

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

postGIS — это пространственная база данных.

2. Как хранится пространственная база данных?

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

Эти типы пространственных данных абстрагируют и инкапсулируют пространственные структуры, такие как границы и измерения.

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

Если взять в качестве примера тип данных Point, точка может быть представлена ​​значениями координат X и Y в определенной системе координат. Например, «POINT(116.4074 39.9042)» представляет точку, расположенную в центре Пекина.

Кроме того, типы пространственных данных организованы в иерархию типов. Каждый подтип наследует структуру (свойства) и поведение (методы или функции) своего родительского типа.

3. Есть ли в пространственной базе данных индексы?

Обычные базы данных имеют индексы. Пространственные базы данных также имеют пространственные индексы. Что они делают?

Приведите пример приложения, чтобы было легче понять. Найдите все торговые центры в радиусе 100 м от вас. Если пространственного индекса нет, вам нужно кропотливо вычислить квадратный корень из координат, а затем сохранить все данные о торговых центрах, расстояние до которых меньше 100.

Однако существуют трудности при проектировании индексов пространственных баз данных: как организовать структуру данных. Обычные базы данных могут использовать деревья B+ и т. д. Существует много типов пространственных индексов: индекс сетки, индекс квадродерева, индекс пирамиды...

Его принцип: слишком продвинутый, ещё не показанный

4. Что такое пространственная функция?

Двумерный жук не может представить, насколько сложен трёхмерный мир: анализ геометрической информации, определение пространственных отношений...

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

Пространственные функции в основном делятся на пять категорий:

Преобразование — функции, которые преобразуют геометрию (формат, используемый для хранения пространственной информации в PostGIS) во внешние форматы данных. Управление – функции для управления информацией о пространственных таблицах и организациях PostGIS. Поиск — функции для получения геометрических свойств и измерений пространственной информации. Сравнить — функция, сравнивающая пространственные отношения между двумя геометрическими фигурами. Generate — Функции, которые генерируют новые формы на основе других геометрических фигур.

2. Быстрый старт с PostGIS

1.Что такое пост ГИС

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

Это означает, что этот парень имеет открытый исходный код.

2. Как использовать PostGIS?

Цель этого руководства – помочь вам быстро понять, что такое PostGIS, поэтому оно не будет слишком подробным.

самоходныйЗагрузите и установитеpostGreSQL、postGIS

Импортировать файлы данныхshape file

Shapfile должен содержать следующие файлы:

.shp — хранит геометрическую информацию о географических объектах. .shx – хранит индексную информацию для геометрии объектов. .dbf — хранит информацию об атрибутах (негеометрическую информацию) географических объектов. Дополнительные файлы включают в себя:

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

Сога! Оказывается, импортированный файл дает вам наглядное представление. Мы знаем этот вопрос!

Манипулировать данными с помощью SQL Ой, оказывается, это всё тот ​​же рецепт и тот же вкус.

Язык кода:javascript
копировать
SELECT name
FROM nyc_neighborhoods
WHERE boroname = 'Brooklyn';

Управление метаданными PostGIS предоставляет две таблицы для отслеживания и составления отчетов о геометрии в базе данных (содержимое этих двух таблиц эквивалентно метаданным).

Первая таблица пространственная_ref_sys – определяет все системы пространственной привязки, известные базе данных, которые будут объяснены более подробно позже. Вторая таблица (фактически представление) geometry_columns — предоставляет информацию описания всех таблиц пространственных данных в базе данных.

Запрашивая эту таблицу, ГИС-клиенты и базы данных могут определить, чего ожидать при получении данных, и могут выполнить любое необходимое проецирование, обработку и рендеринг без необходимости проверять каждую геометрию — вот какой эффект дают метаданные.

Представляет объекты реального мира Simple Features for Спецификация SQL (SFSQL) является исходным руководящим стандартом для разработки PostGIS, который определяет, как проявляется объекты реального мир. Но этот приятель представляет только два измерения, в то время как PostGIS расширяет трехмерное и четырехмерное представление.

Говоря человеческим языком, он может представлять: точки, строки линий, многоугольники и графические коллекции (Коллекция).

Приведите пример коллекции графиков.

Язык кода:javascript
копировать
SELECT name, ST_AsText(geom)
FROM geometries
WHERE name = 'Collection';

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

Это всего лишь базовая операция, вы ее выучили?

Хранение геометрии PostGIS поддерживает ввод и вывод геометрии в различных форматах:

  • Well-known text(WKT)
  • Well-known binary(WKB)
  • Geographic Mark-up Language(GML)
  • Keyhole Mark-up Language(KML)
  • GeoJson
  • Scalable Vector Graphics(SVG)

Метод использования заключается в вызовеencodeфункция,Следующий SQL-запрос показывает пример представления WKB.

Язык кода:javascript
копировать
SELECT encode(
  ST_AsBinary(ST_GeometryFromText('LINESTRING(0 0,1 0)')),
  'hex');

Поскольку WKT и WKB определены в спецификации SFSQL, они не могут обрабатывать трехмерную или четырехмерную геометрию. Для этих случаев PostGIS определяет форматы Extended Well Known Text (EWKT) и Extended Well Known Binary (EWKB) для обработки трехмерной или четырехмерной геометрии.

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

Язык кода:javascript
копировать
olddata::newtype

Например, преобразуйте тип double в тип текстовой строки:

Язык кода:javascript
копировать
SELECT 0.9::text;

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

встроенные функции

Вот введение в то, какие функции он имеет. Товарищи имеют хорошее представление и при необходимости проверяют мануал.

Язык кода:javascript
копировать
sum(expression) aggregate to return a sum for a set of records
count(expression) aggregate to return the size of a set of records
ST_GeometryType(geometry) returns the type of the geometry
ST_NDims(geometry) returns the number of dimensions of the geometry
ST_SRID(geometry) returns the spatial reference identifier number of the geometry
ST_X(point) returns the X ordinate
ST_Y(point) returns the Y ordinate
ST_Length(linestring) returns the length of the linestring
ST_StartPoint(geometry) returns the first coordinate as a point
ST_EndPoint(geometry) returns the last coordinate as a point
ST_NPoints(geometry) returns the number of coordinates in the linestring
ST_Area(geometry) returns the area of the polygons
ST_NRings(geometry) returns the number of rings (usually 1, more if there are holes)
ST_ExteriorRing(polygon) returns the outer ring as a linestring
ST_InteriorRingN(polygon, integer) returns a specified interior ring as a linestring
ST_Perimeter(geometry) returns the length of all the rings
ST_NumGeometries(multi/geomcollection) returns the number of parts in the collection
ST_GeometryN(geometry, integer) returns the specified part of the collection
ST_GeomFromText(text) returns geometry
ST_AsText(geometry) returns WKT text
ST_AsEWKT(geometry) returns EWKT text
ST_GeomFromWKB(bytea) returns geometry
ST_AsBinary(geometry) returns WKB bytea
ST_AsEWKB(geometry) returns EWKB bytea
ST_GeomFromGML(text) returns geometry
ST_AsGML(geometry) returns GML text
ST_GeomFromKML(text) returns geometry
ST_AsKML(geometry) returns KML text
ST_AsGeoJSON(geometry) returns JSON text
ST_AsSVG(geometry) returns SVG text

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

пространственные отношения

До сих пор мы могли работать только с одной геометрией одновременно.

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

На такие вопросы, как «Какая велосипедная площадка находится ближе всего к парку?» или «Где пересекаются линия метро и улица?», можно ответить только путем сравнения и анализа геометрии, представляющей велосипедную площадку, улицу и линию метро.

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

  • ST_Equals(geometry A, geometry B)Место для тестирования двух фигурравныйсекс。
  • ST_Intersects、ST_CrossesиST_Overlapsиспользуются для проверки того, является ли геометрия внутреннейпересекаться
  • ST_Touches()Проверьте, находятся ли две геометрии на своих границахтрогать,Но внутри них не пересечься
  • ST_Within()иST_Contains()Проверьте, завершена ли геометрияВключатьвнутри другой геометрической фигуры
  • ST_Distance(geometry A, geometry B)Вычисляет расстояние между двумя геометриямикратчайшее расстояние

пространственная связь пространственная связь(spatial присоединяется) — это космическая база Основные компоненты данных, которые позволяют использовать пространственные отношения в качестве соединительного ключа (присоединиться ключ) для соединения информации из разных таблиц данных

Также поддерживается обобщение. Комбинация JOIN и GROUP BY поддерживает определенные виды анализа, обычно встречающиеся в ГИС-системах. Это почти то же самое, что и обычная реляционная база данных. Больше никаких представлений.

Просто дай мне каштан и почувствуй его.

Язык кода:javascript
копировать
SELECT
  n.name,
  Sum(c.popn_total) / (ST_Area(n.geom) / 1000000.0) AS popn_per_sqkm
FROM nyc_census_blocks AS c
JOIN nyc_neighborhoods AS n
ON ST_Intersects(c.geom, n.geom)
WHERE n.name = 'Upper West Side'
OR n.name = 'Upper East Side'
GROUP BY n.name, n.geom;

Приведенный выше SQL-запрос вычисляет: «Какова плотность населения (человек на квадратный километр) в «Верхнем Вест-Сайде» и «Верхнем Ист-Сайде»?»

3. Расширенный игровой процесс PostGIS

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

1. Пространственный индекс

Индекс пространства — одно из величайших значений PostGIS. В предыдущем примере,Построение пространственной связи требует взаимного выравнивания всей таблицы. Это очень дорого: соединение двух таблиц по 10000 записей в каждой (каждая таблица без индекса) нужно будет выполнить 100000000 раз. Сравнивать, если вы используете пространственный индекс;,Тогда число С сравнения может составлять всего 20 000 раз.

ББ для создания и удаления индексов не так много. Вы все это сделаете.

Язык кода:javascript
копировать
CREATE INDEX nyc_census_blocks_geom_idx
ON nyc_census_blocks
USING GIST (geom);

Примечание. Предложение USING GIST указывает PostgreSQL использовать универсальную структуру индекса (универсальную структуру индекса GIST) при построении индекса.

принцип

Позвольте мне сначала ответить на вопрос: что делает пространственный индекс?

Повышение эффективности запросов.

Как пространственный индекс повышает эффективность запросов?

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

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

База данных решает проблему «Какая линия пересекает желтую звезду», сначала используя пространственный индекс для решения проблемы «Какая рамка диапазона пересекает желтую рамку диапазона» (очень быстро), а затем «Какая линия пересекает желтую звезду». Вышеописанный процесс предназначен только для пространственных элементов, тестируемых впервые.

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

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

Наиболее часто используемые функции PostGIS (ST_Contains, ST_Intersects, ST_DWithin и т. д.) включают фильтры автоматической индексации. Но некоторые функции (например, ST_Relate) не включают индексные фильтры.

Чтобы выполнить поиск по ограничивающей рамке с использованием индекса (т. е. чистого индексного запроса – Index only Query-без фильтра),Нужно использовать"&&"оператор

Планировщик запросов: стоит ли использовать индексы? Планировщик запросов PostgreSQL (запрос planner) разумно выбирает, когда использовать или не использовать пространственные индексы для вычисления запросов. Как ни странно, поиск по пространственному индексу не всегда выполняется быстрее.

По умолчанию PostgreSQL периодически собирает статистику данных для использования планировщиком запросов. Однако если изменить состав таблицы в течение короткого периода времени, статистика не будет актуальной. Поэтому, чтобы гарантировать соответствие статистики содержимому таблицы, целесообразно вручную запустить команду АНАЛИЗ после загрузки и удаления объемных данных из таблицы.

Язык кода:javascript
копировать
ANALYZE nyc_census_blocks;

Очистка: освободить место ОЧИСТКУ необходимо выполнять каждый раз при создании нового индекса или после большого количества обновлений, вставок или удалений таблицы. Команда VACUUM просит PostgreSQL освободить все неиспользуемое пространство на страницах таблиц, оставшееся в результате обновления или удаления записей.

Язык кода:javascript
копировать
VACUUM ANALYZE nyc_census_blocks;
2. Проекция данных
2.1 Введение в проецирование данных

Земля не плоская, и нет простого способа отобразить ее на плоской бумажной карте (или на экране компьютера), поэтому люди придумывали всевозможные изобретательные решения (проекции).

Каждая схема проекции имеет свои преимущества и недостатки. Некоторые проекции сохраняют характеристики площади; некоторые проекции сохраняют характеристики угла, например, проекции Меркатора пытаются найти хорошее промежуточное состояние смешивания с небольшими искажениями. Общим для всех проекций является то, что они преобразуют (Землю) в плоскую декартову систему координат.

Использовать проекцию особенно просто. PostGIS предоставляет функции ST_SRID(geometry) и ST_SetSRID(geometry, SRID).

Сравните данные Сравнение координат должно основываться на его SRID (строго говоря, это должна быть пространственная система отсчета). Если это не та же самая система отсчета, сравнение бессмысленно и будет возвращена ошибка, как в следующем примере.

Язык кода:javascript
копировать
SELECT ST_Equals(
         ST_GeomFromText('POINT(0 0)', 4326),
         ST_GeomFromText('POINT(0 0)', 26918)
         );

Преобразование данных Данные могут быть преобразованы между различными SRID.

Язык кода:javascript
копировать
SELECT ST_AsText(
 ST_Transform(
   ST_SetSRID(geom,26918),
 4326)
)
FROM geometries;
2.2 Географические координаты

Координаты очень часто имеют форму «географии», то есть данные в форме «широта/долгота». Географические координаты не являются декартовыми координатами.

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

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

Язык кода:javascript
копировать
SELECT code, ST_X(geog::geometry) AS longitude FROM airports;
3. Функция создания геометрии

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

3.1 Замените фигуры точками

Общей необходимостью при составлении пространственных запросов является замена полигональных объектов точечными представлениями объектов.。Это полезно дляпространственная связь(spatial join) очень полезен, поскольку использование St_Intersects(geometry, геометрия) часто приводит к двойным вычислениям: многоугольник, лежащий на границе двух многоугольников, будет пересекать многоугольники с обеих сторон, а замена его точкой заставит его лежать то на одной, то на другой стороне, а не пересекать оба многоугольника по обе стороны пересекаются.

  • ST_Centroid(geometry) – возвращает точку примерно в центре масс входной геометрии. Этот простой расчет выполняется очень быстро, но иногда нежелателен, поскольку точки возврата не обязательно находятся на самих объектах. Если входная геометрия вогнутая (геометрия в форме буквы «C»), возвращаемый центр масс может находиться не внутри формы.
  • ST_PointOnSurface(geometry) — возвращает точку, которая гарантированно находится внутри входного многоугольника. В вычислительном отношении это намного дороже, чем операции центроида.
3.2 Буфер

Операции с буфером распространены в рабочих процессах ГИС, а также возможны в PostGIS. ST_Buffer(geometry, distance) принимает геометрию и буферное расстояние в качестве параметров и выводит многоугольник, границы которого равны расстоянию между входной геометрией и входным буферным расстоянием. Просто используйте функцию ST_Buffer.

3.3 Перекрытие и слияние

Другая классическая операция ГИС — наложение — создает новую геометрию путем вычисления пересечения двух перекрывающихся полигонов.

Используйте функцию ST_Intersection(геометрия A, геометрия B).

ST_Union объединяет две геометрии

4. Эффектность геометрических фигур

Полигон может быть недопустимым. Если он недействителен, будет выдано сообщение об ошибке TopologyException. Ниже приведены некоторые правила действия.

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

Первые два обязательны. Последние два являются необязательными. Вы также можете настроить самосогласованные правила.

Функцию ST_IsValid(geometry) можно использовать для проверки достоверности геометрии.

Исправить неверную геометрию можно, но плохая новость: не существует 100% надежного способа исправить неверную геометрию.

Хорошим инструментом для визуального исправления неверной геометрии является OpenJump (http://openjump.org).,это вTools->QA->Validate Selected Валидатор включен в раздел «Слои».

А теперь хорошая новость: большую часть дефектов в базе данных можно исправить любым из следующих способов:

Функция ST_MakeValid Функция ST_Buffer

5. Равенство геометрических фигур.

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

Точное равенство (ST_OrderingEquals) Точное равенство определяется путем последовательного сравнения вершин двух геометрий одна за другой, чтобы убедиться в их идентичности по положению. Если вершины определены в разном порядке, даже равенство будет считаться неравным.

Пространственное равенство (ST_Equals) Функцию ST_Equals можно использовать для проверки пространственного равенства или эквивалентности геометрических фигур. Различия в направлении рисования многоугольника, заданной начальной точке многоугольника или количестве содержащихся точек здесь не важны. Важно то, что многоугольники равны, если они содержат одинаковую площадь пространства.

Ограничительные рамки равны (~=) Для более быстрого сравнения предусмотрены ограничивающие рамки. поле) оператор равенства ’ ~= ’ . Это работает только с ограничивающей рамкой (прямоугольником), гарантируя, что геометрии занимают один и тот же 2D-экстент, но не обязательно одно и то же пространство. Это не обязательно точно, но вы можете использовать его сначала для грубого отбора, а затем комбинировать его с другими методами для точного выбора. Сначала толстый, а потом тонкий.

6. Линейная привязка

Линейные ссылки — это метод представления объектов, которые можно описать, ссылаясь на базовый линейный объект. Общие примеры использования линейного эталонного моделирования включают в себя:

Активы автомагистралей, которые представлены милями вдоль сети автомагистралей. Операции по содержанию дорог означают операции, которые происходят вдоль сети автомагистралей между парами измерений в милях. Запасы аквакультуры, в которых наличие рыбы фиксируется на расстоянии вверх по течению. Гидрологические характеристики реки принимаются за эталон от одной точки реки к другой.

Что такое линейная ссылка?

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

Не могу понять?

Вы всегда знаете вспомогательную линию. Фактически под линейной привязкой можно понимать вспомогательную линию, а расчет других положений — относительное положение к вспомогательной линии. Например, вы используете рост своего старшего брата в качестве ориентира, чтобы вычислить, насколько вы выше его, и определить, стали ли вы выше (при условии, что ваш брат перестал расти выше, это неправильно~)

Подробности смотрите в следующих примерах.

На рисунке ниже показано фактическое применение линейной привязки в транспортной сети. Красный — линейная привязка.

Линейную ссылку можно создать, используя следующий синтаксис.

Язык кода:javascript
копировать
SELECT ST_LineLocatePoint('LINESTRING(0 0, 2 2)', 'POINT(1 1)');
7. Модель DE9IM

«Пространственно расширенная модель с 9 пересечениями» (DE9IM) представляет собой основу для моделирования взаимодействия двух пространственных объектов.

Во-первых, каждый пространственный объект имеет:

интерьер граница экстерьер

Даже сегменты линий и точки имеют внутреннюю, внешнюю и границы.

Для сегментов линии: внутренняя часть линии, ограниченная конечными точками; граница — это конечные точки линейного объекта; внешняя — все остальные части плоскости, кроме внутренней и границы;

Что касается точек, то это еще более странно: внутренняя часть — это точка, граница — пустое множество, а внешняя — все остальное на плоскости, кроме точки.

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

Обратите внимание, что существуетdimпараметр,Правило такое: для многоугольника в приведенном выше примере,Внутреннее пересечение представляет собой двумерную область.,Значит соответствующая часть матрицы заполняется цифрой «2». Граница только в нульмерной точке пересекаться,Поэтому соответствующая часть матрицы заполняется «0».

Позвольте мне дать вам еще один каштан.

Матрица DE9IM относительно их пересечения выглядит следующим образом:

Обратите внимание, что границы двух вышеприведенных объектов на самом деле вообще не пересекаются (конечные точки линии пересекают внутреннюю часть многоугольника, а не границу многоугольника, или наоборот), поэтому ячейки B/B заполняются «Ф».

SQL для генерации матрицы модели DE9IM выглядит следующим образом.

Язык кода:javascript
копировать
SELECT ST_Relate(
         'LINESTRING(0 0, 2 0)',
         'POLYGON((1 -1, 1 1, 3 1, 3 -1, 1 -1))'
);

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

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

Вы можете сделать это с помощью следующего sql, и процесс деривации не будет выполнен.

Язык кода:javascript
копировать
SELECT docks.*
FROM docks JOIN lakes ON ST_Intersects(docks.geom, lakes.geom)
WHERE ST_Relate(docks.geom, lakes.geom, '1FF00F212');
8. Индексный кластер

Один из способов ускорить доступ к данным — обеспечить, чтобы записи, которые можно извлекать вместе в одном наборе результатов, находились в близких физических местах на жестком диске. Это называется «кластеризация».

Кластеризация на основе пространственных индексов имеет смысл для пространственных данных, доступ к которым будет осуществляться с помощью пространственных запросов: похожие вещи, как правило, имеют одинаковое местоположение (первый закон географии).

Напишите sql и создайте кластер индексов.

Язык кода:javascript
копировать
-- Cluster the blocks based on their spatial index
CLUSTER nyc_census_blocks USING nyc_census_blocks_geom_idx;

Разделен на две категории:

  • Кластеризация на основе R-Tree
  • Кластеризация на GeoHash

Вы можете самостоятельно разобраться в двух алгоритмах.

9. 3-D

До сих пор мы имели дело с двумерными геометриями (двумерными геометриями) только с координатами X и Y. Но PostGIS поддерживает дополнительные измерения для всех типов геометрии. Для каждой координаты он также поддерживает измерение «Z» для информации о высоте и измерение «M» для добавления дополнительной информации (обычно времени, миль дороги или информации о расстоянии).

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

Если хотите, вы можете даже расширить его до N-D.

10.Недавний поиск полей

KNN — это метод поиска ближайших соседей, основанный на чистом пространственном индексе. Я не буду здесь вдаваться в подробности, главное, чтобы вы знали, что такой алгоритм существует.

11. Используйте триггеры для отслеживания исторических операций редактирования.

Общим требованием к производственным базам данных является возможность отслеживать историю данных, редактируемых пользователем: как данные менялись между двумя датами, кто ими управлял и что в них изменилось? Некоторые ГИС-системы отслеживают операции редактирования данных пользователями, включая функции управления изменениями в клиентский интерфейс, но это увеличивает сложность клиентских инструментов редактирования.

Используя базу данных и триггерный механизм базы данных, можно отслеживать историю редактирования любой таблицы, позволяя клиенту поддерживать простое «прямое редактирование» таблицы редактирования (клиент не несет ответственности за функцию отслеживания истории редактирования, только CRUD ).

12. Функция ST_MakeEmptyRaster для создания пустых растров

ST_MakeEmptyRaster используется для создания пустого растра без значений ячеек (без полос). Каждый параметр используется для определения метаданных этого пустого растра:

ширина, высота - количество столбцов и строк растра Upperleftx, UpperLefty — соответствует координатам верхнего левого угла сетки в пространственной системе координат. Scalex, Scaley - ширина и длина одного пикселя (в единицах, эквивалентных единицам пространственной системы координат). skewx, skewy — угол поворота, если растровые данные обращены на север, значение равно 0. Значение по умолчанию — 0. srid — пространственная система координат, по умолчанию равна 0. размер пикселя — ширина и длина одного пикселя. Когда Scalex и Scaley равны, вы можете напрямую использовать этот параметр для установки размера пикселя.

Эффект следующий

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose