mysql 地理位置查询

mysql空间扩展

mysql 官方指南为 GLength(LineStringFromWKB(LineString(point1, point2)))

首先创建位置表结构

CREATE TABLE `locationpoint` (
  `id` int(11) NOT NULL,
  `pt` point NOT NULL,
  `province` varchar(20) NOT NULL,
  `city` varchar(20) NOT NULL,
  `longitude` double(10,3) NOT NULL,
  `latitude` double(10,3) NOT NULL,
  `geo_code` varchar(12) NOT NULL COMMENT 'geohash编码',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

插入字段 示例一部分数据


INSERT INTO `locationpoint` VALUES ('1147', GeomFromText('POINT(117.17 31.52)'), '安徽省', '合肥', '117.170', '31.520', 'uxyrvrbpvpzr');
INSERT INTO `locationpoint` VALUES ('1148', GeomFromText('POINT(117.02 30.31)'), '安徽省', '安庆', '117.020', '30.310', 'bpbpbpbpbpbp');
INSERT INTO `locationpoint` VALUES ('1149', GeomFromText('POINT(117.21 32.56)'), '安徽省', '蚌埠', '117.210', '32.560', 'zzzzzzzzzzzz');
INSERT INTO `locationpoint` VALUES ('1150', GeomFromText('POINT(115.47 33.52)'), '安徽省', '亳州', '115.470', '33.520', 'zzzzzzzzzzzz');
INSERT INTO `locationpoint` VALUES ('1151', GeomFromText('POINT(117.52 31.36)'), '安徽省', '巢湖', '117.520', '31.360', 'bpbpbpbpbpbp');
INSERT INTO `locationpoint` VALUES ('1152', GeomFromText('POINT(118.18 32.18)'), '安徽省', '滁州', '118.180', '32.180', 'zzzzzzzzzzzz');
INSERT INTO `locationpoint` VALUES ('1153', GeomFromText('POINT(115.48 32.54)'), '安徽省', '阜阳', '115.480', '32.540', 'zzzzzzzzzzzz');
INSERT INTO `locationpoint` VALUES ('1154', GeomFromText('POINT(117.28 30.39)'), '安徽省', '贵池', '117.280', '30.390', 'bpbpbpbpbpbp');
INSERT INTO `locationpoint` VALUES ('1155', GeomFromText('POINT(116.47 33.57)'), '安徽省', '淮北', '116.470', '33.570', 'zzzzzzzzzzzz');
INSERT INTO `locationpoint` VALUES ('1156', GeomFromText('POINT(116.58 32.37)'), '安徽省', '淮南', '116.580', '32.370', 'zzzzzzzzzzzz');
INSERT INTO `locationpoint` VALUES ('1157', GeomFromText('POINT(118.18 29.43)'), '安徽省', '黄山', '118.180', '29.430', 'bpbpbpbpbpbp');
INSERT INTO `locationpoint` VALUES ('1158', GeomFromText('POINT(115.21 33.15)'), '安徽省', '界首', '115.210', '33.150', 'zzzzzzzzzzzz');
INSERT INTO `locationpoint` VALUES ('1159', GeomFromText('POINT(116.28 31.44)'), '安徽省', '六安', '116.280', '31.440', 'bpbpbpbpbpbp');
INSERT INTO `locationpoint` VALUES ('1160', GeomFromText('POINT(118.28 31.43)'), '安徽省', '马鞍山', '118.280', '31.430', 'bpbpbpbpbpbp');
INSERT INTO `locationpoint` VALUES ('1161', GeomFromText('POINT(117.58 32.47)'), '安徽省', '明光', '117.580', '32.470', 'zzzzzzzzzzzz');
INSERT INTO `locationpoint` VALUES ('1162', GeomFromText('POINT(116.58 33.38)'), '安徽省', '宿州', '116.580', '33.380', 'zzzzzzzzzzzz');
INSERT INTO `locationpoint` VALUES ('1163', GeomFromText('POINT(118.59 32.41)'), '安徽省', '天长', '118.590', '32.410', 'zzzzzzzzzzzz');
INSERT INTO `locationpoint` VALUES ('1164', GeomFromText('POINT(117.48 30.56)'), '安徽省', '铜陵', '117.480', '30.560', 'bpbpbpbpbpbp');
INSERT INTO `locationpoint` VALUES ('1165', GeomFromText('POINT(118.22 31.19)'), '安徽省', '芜湖', '118.220', '31.190', 'bpbpbpbpbpbp');
INSERT INTO `locationpoint` VALUES ('1166', GeomFromText('POINT(118.44 30.57)'), '安徽省', '宣州', '118.440', '30.570', 'bpbpbpbpbpbp');
INSERT INTO `locationpoint` VALUES ('1167', GeomFromText('POINT(119.18 26.05)'), '福建省', '福州', '119.180', '26.050', 'bpbpbpbpbpbp');
INSERT INTO `locationpoint` VALUES ('1168', GeomFromText('POINT(119.31 25.58)'), '福建省', '长乐', '119.310', '25.580', 'bpbpbpbpbpbp');
INSERT INTO `locationpoint` VALUES ('1169', GeomFromText('POINT(119.39 27.06)'), '福建省', '福安', '119.390', '27.060', 'bpbpbpbpbpbp');
INSERT INTO `locationpoint` VALUES ('1170', GeomFromText('POINT(119.23 25.42)'), '福建省', '福清', '119.230', '25.420', 'bpbpbpbpb

sql 根据空间查询

  select id, point(longitude,latitude) as pt from locationpoint where 0.5 >= GLength(LineStringFromWKB(LineString(pt, point(113.4 ,34.46))))

根据地址获取经纬度: https://blog.csdn.net/qq_21891743/article/details/79105899.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL支持地理空间信息的存储和查询。你可以使用MySQL的地理空间展来处理地理空间数据类型,点、线、多边形等。 要使用理空间功能,你需要确保你的版本支持地理空间扩展。在装MySQL时,需要选择启用地理空间支持,或者在已安装的MySQL上启用地理空间插件。 一旦你的MySQL服务器支持地理空间扩展,你可以创建具有地理空间属性的表,并将地理空间数据存储在其中。下面是一个创建包含地理空间列的表的示例: ```sql CREATE TABLE locations ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), location GEOMETRY ); ``` 在这个例子中,`location`列被定义为`GEOMETRY`类型,用于存储地理空间数据。 要查询地理空间数据,你可以使用一些MySQL提供的函数和操作符。例如,你可以使用 `ST_DISTANCE()` 函数计算两个点之间的距离,使用 `ST_CONTAINS()` 函数判断一个点是否在一个多边形内等等。 以下是一个简单的查询示例,找出距离给定坐标最近的位置: ```sql SELECT id, name, ST_DISTANCE(location, POINT(40.7128, -74.0060)) AS distance FROM locations ORDER BY distance LIMIT 1; ``` 这个查询将返回距离给定坐标(纬度40.7128,经度-74.0060)最近的位置的id、名称和距离。 这只是地理空间功能的简单介绍,MySQL提供了更多的函数和操作符来处理地理空间数据。你可以查阅MySQL官方文档以获得更详细的信息和示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值