MySQL - конвертируйте lat / lon и geojson в геометрию и ищите внутри многоугольника / многоугольника - PullRequest
0 голосов
/ 24 февраля 2019

У меня есть две таблицы:

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)

некоторая помощь и руководство приветствуются.

...