Пространственный SQL: самый подходящий тип данных для квадрата?

Если Ваш HTML следует стандартам XHTML, можно сделать большой парсинг и обработку использования классов пространства имен System.XML.

, Если, с другой стороны, если то, что Вы анализируете, - то, что веб-разработчики называют "супом тега", Вам будет нужен сторонний синтаксический анализатор как Пакет Гибкости HTML .

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

5
задан Troels Arvin 17 August 2009 в 08:40
поделиться

3 ответа

В DB2 это также многоугольник. Похоже, вы храните сетки, поэтому быстрая проверка может заключаться в том, что если ST_ENVELOPE (geometry) == geometry, то у вас есть квадрат

Этот код взят из

документации DB2

SET CURRENT PATH = CURRENT PATH, db2gse;
CREATE TABLE sample_geoms (id INTEGER, geometry ST_Geometry);

INSERT INTO sample_geoms VALUES
(1, ST_Geometry(ST_Point('point EMPTY',0)));

INSERT INTO sample_geoms VALUES
(2, ST_Geometry(ST_Point('point zm (10 10 16 30)' ,0)));

INSERT INTO sample_geoms VALUES
(3, ST_Geometry(ST_Multipoint('multipoint m (10 10 5, 50 10 6, 
         10 30 8)' ,0)));

INSERT INTO sample_geoms VALUES
(4, ST_Geometry(ST_Linestring('linestring (10 10, 20 10)',0)));

INSERT INTO sample_geoms VALUES
(5, ST_Geometry(ST_Polygon('polygon((40 120, 90 120, 90 150, 
         40 150, 40 120))',0)));


SELECT id, CAST(ST_AsText(ST_Envelope(geometry)) as VARCHAR(160))  Envelope
FROM sample_geoms;

Результаты:

ID          ENVELOPE
----------- ---------------------------------------------------------------
      1     -

      2     POLYGON (( 9 9, 11 9, 11 11, 9 11, 9 9))

      3     POLYGON (( 10 10, 50 10, 50 30, 10 30, 10 10))

      4     POLYGON (( 10 9, 20 9, 20  11, 10 11, 10 9))

      5     POLYGON (( 40 120, 90 120, 90 150, 40 150, 40 120))

См. ID = 5? последний POLYGON == ST_ENVELOPE (геометрия)

1
ответ дан 14 December 2019 в 13:43
поделиться

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

1
ответ дан 14 December 2019 в 13:43
поделиться

Даже если ваши данные представляют собой прямоугольник или квадрат, вам все равно потребуется использовать тип ST_POLYGON. Однако, когда вы выполняете запрос к данным, вы можете использовать фильтры первого порядка, такие как ST_EnvIntersects .

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

Что касается проверки данных, вы можете добавить триггер базы данных, который проверяет ST_EQUALS (ST_ENVELOPE (geom), geom) = 1 .

4
ответ дан 14 December 2019 в 13:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: