Приведение типа География в PostGIS - PullRequest
1 голос
/ 23 июня 2011

У меня определена следующая таблица, в которой используется география PostGIS.

CREATE TABLE test_geog (
    id SERIAL PRIMARY KEY,
    boundary GEOGRAPHY(Polygon)
);

Я добавил следующий тестовый полигон в таблицу:

INSERT INTO test_geog VALUES (ST_GeographyFromText('SRID=4326;POLYGON((0 0, 0 5, 5 5, 5 0, 0 0))'));

Я пытаюсь определить, является лиТочка лежит в любом из многоугольников в этой таблице.У меня есть этот запрос:

SELECT ST_ContainsProperly(ST_GeographyFromText('Point(2 2)'), area)
FROM (SELECT boundary FROM test_geog) AS area;

Это приводит к следующей ошибке:

ERROR:  function st_containsproperly(geography, record) does not exist
LINE 1: SELECT ST_ContainsProperly(ST_GeographyFromText('Point(2 2)'...
            ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

Как мне преобразовать эту "запись" в POLYGON?Я в замешательстве, потому что кажется, что в столбце уже объявлено, что он содержит только POLYGON типов, но по какой-то причине это не то, что я извлекаю из базы данных.

Я попытался разыграть записьна POLYGON вот так:

SELECT ST_ContainsProperly(ST_GeographyFromText('Point(2 2)'), CAST (boundary AS POLYGON))
FROM (SELECT boundary FROM source_imagery) AS nitf_area;

Но это дает мне эту ошибку:

ERROR:  cannot cast type record to polygon
LINE 1: ...tainsProperly(ST_GeographyFromText('Point(2 2)'), CAST (boun...

Что я здесь не понимаю?

1 Ответ

1 голос
/ 23 июня 2011

На мой вопрос ответили на форуме ГИС. Я сделал глупую ошибку, думая, что ST_ContainsProperly можно использовать для географии, когда он фактически поддерживается только для геометрии. Мне также не понадобился лишний подзапрос, который я пытался выполнить.

Так вот мое решение. Вместо этого я переключился на использование ST_Covers, что делает то, что я хотел, и поддерживает географию. Это позволяет избежать приведения к геометрии. Вот код, который работает:

SELECT ST_Covers(
    boundary, 
    ST_GeographyFromText('Point(2 2)')
) 
FROM source_imagery
...