У меня есть две таблицы:
CREATE TABLE `locations` (
`id` INT(10) UNSIGNED NOT NULL,
`name` VARCHAR(255) NOT NULL,
`latitude` DECIMAL(10,7) NOT NULL,
`longitude` DECIMAL(10,7) NOT NULL,
`point` GEOMETRY NULL DEFAULT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `location_boundries` (
`id` INT(10) UNSIGNED NOT NULL,
`name` VARCHAR(255) NOT NULL,
`geo_json` JSON NULL DEFAULT NULL,
`geom` GEOMETRY NULL DEFAULT NULL,
PRIMARY KEY (`id`)
);
Таблица locations
содержит координаты широты / долготы для стран, регионов, городов и населенных пунктов.
location_boundries
содержит границыкоординаты для стран и регионов в формате геоджон. Обратите внимание, что это комбинация полигонов и мультиполигонов, например:
1149361, Afghanistan, {"type": "Polygon", "coordinates": [[[61.83, 31.022], [61.777, 31.302],21], ... [61.83, 31.022]]]}
783754, Albania, {"type": "MultiPolygon", "coordinates": [[[[19.467, 40.945], [19.437, 41.146], ... [19.461, 40.946]]]]}
Я хочу иметь возможность возвращать местоположения, которые находятся в пределах страны или региона.Чтобы помочь в этом, я добавил столбец геометрии в обе таблицы (point и geom).
Поэтому я подумал, что мог бы сделать что-то вроде этого:
SELECT locations.name
FROM locations
INNER JOIN location_boundries ON ST_CONTAINS(location_boundries.geom, locations.point)
AND location_boundries.name = 'North London';
Будет ли SQL вышеработать для границ типа polygon и multipolygon?
Как преобразовать geojson в столбец geom, если тип границы может быть либо polygon, либо mutlipolygon, либо я могу выполнить пространственный поиск, используя только столбец geojson?
Каков синтаксис mysql для заполнения столбца точечной геометрии с использованием значений lat и long в таблице местоположений - одинаковы ли следующие два утверждения?
UPDATE locations SET `point` = ST_GeomFromText( CONCAT( 'POINT(', longitude, ' ', latitude, ')' ) );
UPDATE locations SET `point` = Point(longitude, latitude)
некоторая помощь и руководство приветствуются.