Точка поиска внутри мультиглигона, загруженного с помощью ST_GeomFromGeoJSON в MySQL - PullRequest
0 голосов
/ 01 мая 2019

Я использую 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;
...