Postgis работа с полигоном координат ST_Containts ни чего не возвращает помогите разобрать

AndryDl44
Дата: 30.04.2015 09:30:18
Доброго всем времени суток. У меня проблема следующего плана. Есть табличка в ней поле с геометрией точки (координаты на карте), из нее надо выбрать все записи которые попадают в определенную область. Вроде все тривиально , на деле оказалось не совсем. Перерыл весь инет , не нашел ни одного нормального примера работы с полигоном координат. Дибильные по другому назвать не могу из мануала не катят. Я делаю следующее :

SELECT * FROM table
WHERE
ST_Within(geo,ST_GeometryFromText('POLYGON((70.95 87.76,71.01 87.77,70.94 87.76, 70.85 87.74,70.95 87.76))',4326));

вроде должно работать , ан нет . Запрос ничего не возвращает, а должен. Та же конструкция но ST_Containts (зеркальной функцией) тот же результат.

вот так показывает что пересечения есть

SELECT * FROM table
WHERE
geo && ST_GeometryFromText('POLYGON((70.95 87.76,71.01 87.77,70.94 87.76, 70.85 87.74,70.95 87.76))',4326));

но это ведь не совсем то, это проверка в индексе

Еще пробовал st_covers - результат не адекватный. Не могу понять что я делаю не так. Подозреваю что полигон собирается не адекватно. ST_PolygonFromText то же пробовал результат тот же.
Просветите пожалуйста, кто сведущ куда рыть ? За ранее всем, кто поделится информацией благодарен.
Да координаты в примере от балды в базе и при выполнении реальные и не работает
big-trot
Дата: 30.04.2015 11:14:51
Какая проекция в поле geo? Может проекции разные. Надо привести к одной проекции.
big-trot
Дата: 30.04.2015 11:20:37
Оператор && - пересечения, а ST_Within Возвращает 1 (TRUE), если геометрияA находится"пространственно внутри" геометрии B.
Пересечение это не охват.
big-trot
Дата: 30.04.2015 11:31:26
Для примера

SELECT ST_Within(ST_GeometryFromText('POLYGON((1 1,1 2,2 2,2 1,1 1))',4326)
,ST_GeometryFromText('POLYGON((1 1,1 2,3 3,2 1,1 1))',4326))

SELECT ST_Within(ST_GeometryFromText('POLYGON((1 1,1 2,3 3,2 1,1 1))',4326)
,ST_GeometryFromText('POLYGON((1 1,1 2,2 2,2 1,1 1))',4326))
AndryDl44
Дата: 30.04.2015 16:45:51
big-trot
Какая проекция в поле geo? Может проекции разные. Надо привести к одной проекции.

Что такое проекция ? Я только начал в этом разбираться. Просто точки на карте хранятся в базе , сделаны методом ST_GeomFromText('POINT('||lng ||' '||lat||' )',4326) , полигон руками (динамически собирается) как показал в примере выше.
AndryDl44
Дата: 30.04.2015 16:47:39
big-trot,
Таких примеров в мануалах пруд пруди с 1-ками и 10-ми, мне нужен пример работы именно с координатами.
AndryDl44
Дата: 04.05.2015 11:10:24
Разобрался, все работает сложность состояла как всегда в мелочи , координаты работают не совсем так как точки на плоскости. Отсюда и все проблемы, точки тупо не попадали внутрь полигона, поменял границы появились значения. Может кому пригодится , рабочий вариант как геометрией так и с географией:

-- геометрия
select * from geo_table
where
st_within(geom,st_geometryfromtext('POLYGON((41 58,41.016 57.77,40.94 57.763, 40.85 57.743,41 58',4326))

--география
select * from geo_table
where
ST_CoveredBy(geog,ST_GeogFromText('SRID=4326;POLYGON((41 58,41.016 57.77,40.94 57.763, 40.85 57.743,41 58))'));

--Поиск по удаленности от точки
SELECT * FROM geo_table
WHERE ST_DWithin(
geog,
ST_GeogFromText('SRID=4326;POINT(41.016 57.77)'),
$radius_meters
);

geog - поле geography в таблице
geom- поле geometry в таблице
Как создавать поля написано в мануалах причем доходчиво.
Спасибо единственному откликнувшемуся, хоть и не помог, но попытался.
Думаю тема закрыта.