Я использую MySQL 8 и с этой таблицей:
CREATE TABLE `country` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`geometry` multipolygon NOT NULL,
PRIMARY KEY (`id`),
SPATIAL KEY `country_geometry_index` (`geometry`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
И geometry
данные вставляются с использованием ST_GeomFromGeoJSON
отсюда https://github.com/nvkelso/natural-earth-vector/blob/master/geojson/ne_50m_admin_0_countries.geojson
Пример:
INSERT INTO `country`
SET
`name` = "Spain",
`geometry` = ST_GeomFromGeoJSON(geojson[spain].geometry);
Теперь я хочу найти, если точка находится внутри какого-либо многоугольника страны с:
select *
from `country`
where ST_Contains(`geometry`, POINT(42.000000, -8.000000))
limit 1;
Но я получаю ошибку:
ERROR 3033 (HY000): Binary geometry function st_contains given two geometries of different srids: 4326 and 0, which should have been identical.
Некоторая помощь?Спасибо!
ОБНОВЛЕНИЕ 1:
Как сказал @Jose Hermosilla Rodrigo, мне нужно установить SRID.Теперь у меня нет ошибок в запросе, но нет результатов:
select *
from `country`
where ST_Contains(`geometry`, ST_SRID(POINT(42.000000, -8.000000), 4326))
limit 1;
Я проверю geometry
значения завтра:)
ОБНОВЛЕНИЕ 2:
Как @JoseЭрмосилла Родриго говорит, мне нужно инвертировать POINT координаты:
select *
from `country`
where ST_Contains(`geometry`, ST_SRID(POINT(-8.000000, 42.000000), 4326))
limit 1;