Допустим, у меня есть полигон геозоны со следующими координатами
POLYGON((-36.861986 174.726745,-36.859241 174.730442,-36.859821 174.730976,-36.862321 174.728156,-36.861986 174.726745))
Я хотел бы иметь возможность генерировать еще один набор точек многоугольника из этого, который находится в радиусе 100 метров.Есть ли какая-либо формула для достижения этой цели?
Мой пример использования: если у меня есть существующий полигон геозоны, я хочу создать еще один полигон геозоны, окружающий его на расстоянии 100 метров.
IЯ использую следующий запрос для вставки данных в мою таблицу.Столбцы geofence и geofence_buffer относятся к типу geography.Столбец с именем geography имеет тип text.Я просто использую это для краткого справочника.
insert into site(name,status,client_id,geofence_type,geography_drawn,geofence,geofence_buffer)
values('Fanshawe','Active',1,1,'POLYGON((-36.849530 174.760984,-36.839295 174.763729,-36.841696 174.779093,-36.854061 174.774291,-36.849530 174.760984))',
'SRID=4267;POLYGON((-36.849530 174.760984,-36.839295 174.763729,-36.841696 174.779093,-36.854061 174.774291,-36.849530 174.760984))',
(select ST_Buffer(ST_GeographyFromText('SRID=4267;POLYGON((-36.849530 174.760984,-36.839295 174.763729,-36.841696 174.779093,-36.854061 174.774291,-36.849530 174.760984))'),100)));
Данные вставляются очень хорошо, но когда я запускаю следующий запрос, чтобы найти, существует ли точка в geofence_buffer, я получаю ошибку ниже.
NOTICE: Coordinate values were coerced into range [-180 -90, 180 90] for GEOGRAPHY
LINE 1: ...ect * from site where ST_DWithin(geofence_buffer, 'SRID=4267...
^
ERROR: Operation on mixed SRID geometries
SQL state: XX000
Я использую запрос
select * from site where ST_DWithin(geofence_buffer, 'SRID=4267;POINT(-36.848362 174.764417)',0.0,false);
Однако, если я выполняю запрос в такой геозоне, то все работает нормально.
select * from site where ST_DWithin(geofence, 'SRID=4267;POINT(-36.848362 174.764417)',0.0,false);