У мене PostGIS таблицю з двома колонками геометрії, як визначено з SRID 4326. Я можна вставити в таблицю без проблем, використовуючи наступне INSERT
твердження (де lng
і lat
є значеннями , переданими в програмно):
INSERT INTO pad_meta (
uuid, created, updated, name, origin, radius, area, expiry, creator
) VALUES (
$1, now(), now(), $2, ST_GeomFromText('POINT(lng, lat)', 4326), $3,
ST_Buffer(ST_GeomFromText('POINT(lng, lat)', 4326), $4), $5, $6
)
Але коли я запитую перехрестя за допомогою ST_Intersects, залежно від значення точки, яку я отримую ERROR: Operation on mixed SRID geometries
.
Наприклад, цей запит працює:
SELECT * FROM pad_meta where ST_Intersects(
'POINT(-122.334172173172 46.602634395263560)'::geometry, area::geometry
) ORDER BY created DESC;
І це помилки:
SELECT * FROM pad_meta where ST_Intersects(
'POINT(-122.334172173172 47.602634395263560)'::geometry, area::geometry
) ORDER BY created DESC;
Зауважте, вони є ідентичними запитами, за винятком значення довготи. Я експериментував з різними значеннями, але не визначив чіткої точки переходу між запитами, які працюють і не відповідають.
Я думаю, що я принципово щось не розумію. На даний момент я вирішив / виправив / вирішив проблему, переформатувавши запит для використанняST_GeomFromText
та чітко вказавши SRID:
SELECT * FROM pad_meta where ST_Intersects(
ST_GeomFromText('POINT(-122.334172173172 47.602634395263560)', 4326), area
) ORDER BY created DESC;
Але я, чесно кажучи, не дуже розумію, у чому різниця, чи це справді "" "рішення.
Моє запитання: Чому я отримую помилку лише для конкретних значень, і який правильний спосіб форматування цього запиту?
Ось моє визначення таблиці для довідок:
CREATE TABLE IF NOT EXISTS pad_meta (
uuid CHAR(32),
created TIMESTAMP,
updated TIMESTAMP,
name VARCHAR(128),
origin GEOMETRY(Point, 4326),
radius INTEGER,
area GEOMETRY(Polygon, 4326),
expiry TIMESTAMP,
creator CHAR(32),
PRIMARY KEY (uuid)
);
Я також переконався, що в геометричних стовпцях є лише один тип SRID:
SELECT f_table_name, f_geometry_column, srid FROM geometry_columns;
f_table_name | f_geometry_column | srid
--------------+-------------------+------
pad_meta | origin | 4326
pad_meta | area | 4326
Довідка / поради високо оцінені. Дякую! (Примітка. Я також бачив це питання , але оскільки я вже чітко визначаю свої геометричні SRID під час вставки в таблицю, схоже, що це не те, що відбувається.)
SRID=4326
(як ви це робили вище) правильним способом встановити SRID для решти оператора? (на відміну від використанняST_GeomFromText
просто тому, що я не знав, як інакше вказати SRID ...?) чи існує спосіб встановити SRID за замовчуванням для запитів? видається досить багатослівним, щоб кожного разу чітко його встановлювати. ще раз дякую!