MySQL-将经/纬度和geojson转换为几何并在面/多面内搜索

时间:2019-02-24 14:58:44

标签: geometry geospatial mysql-5.7

我有两个表:

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包含geojson格式的国家和地区的边界坐标-请注意,这些坐标是多边形和 多多边形,例如:

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]]]]}

我希望能够返回某个国家或地区范围内的位置。为了解决这个问题,我添加了一个几何 列到两个表(点和几何)。

所以我想我可以做这样的事情:

SELECT locations.name 
FROM locations
INNER JOIN location_boundries ON  ST_CONTAINS(location_boundries.geom, locations.point) 
AND location_boundries.name = 'North London';

上面的SQL是否可以处理多边形和多多边形类型的边界?

当边界类型可以是多边形或多义多边形,或者仅使用geojson列进行空间搜索时,如何将geojson转换为geom列?

在locations表上使用lat和long填充点几何列的mysql语法是什么-以下两个语句是否相同?

UPDATE locations SET `point` = ST_GeomFromText( CONCAT( 'POINT(', longitude, ' ', latitude, ')' ) );

UPDATE locations SET `point` = Point(longitude, latitude)

我们将提供一些帮助和指导。

0 个答案:

没有答案