主要是sql查询符合在圆形,多边形区域经纬度的数据
主要是sql查询符合在圆形,多边形区域经纬度的数据
查询
圆形
中心点 + 距离
drop table if exists demo;
CREATE TABLE `demo` (`id` int(5) NOT NULL AUTO_INCREMENT COMMENT '主键',`shop_name` varchar(50) DEFAULT NULL COMMENT '商品名称',`lng` DECIMAL( 11, 8 ) DEFAULT NULL COMMENT '经度',`lat` DECIMAL( 10, 8 ) DEFAULT NULL COMMENT '纬度',`address` text COMMENT '位置名称',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='demo';INSERT INTO `demo` (`id`, `shop_name`, `lng`, `lat`, `address`) VALUES ('4', 'xxx公司', '113.94080600', '22.56090600', '技术大厦');
INSERT INTO `demo` (`id`, `shop_name`, `lng`, `lat`, `address`) VALUES ('5', '科陆电子烟', '113.94154900', '22.56113500', '科陆电子科技大厦');
INSERT INTO `demo` (`id`, `shop_name`, `lng`, `lat`, `address`) VALUES ('6', '酷派信息港', '113.94554300', '22.56051200', '酷派信息港');
INSERT INTO `demo` (`id`, `shop_name`, `lng`, `lat`, `address`) VALUES ('7', '松坪山公园', '113.94728100', '22.55851100', '松坪山公园');
INSERT INTO `demo` (`id`, `shop_name`, `lng`, `lat`, `address`) VALUES ('8', '航天微电机大厦', '113.93847800', '22.56067100', '航天微电机大厦');
INSERT INTO `demo` (`id`, `shop_name`, `lng`, `lat`, `address`) VALUES ('9', '蓝马智造园', '113.93478700', '22.56027400', '蓝马智造园');
INSERT INTO `demo` (`id`, `shop_name`, `lng`, `lat`, `address`) VALUES ('10', '万科智城', '113.94206100', '22.57062800', '万科智城');
INSERT INTO `demo` (`id`, `shop_name`, `lng`, `lat`, `address`) VALUES ('11', '洪浪北', '113.91020200', '22.57442700', '洪浪北');
-- 地球半径:6371
-- distance:距离(公里)
SELECT *,( 6378.138 * acos ( cos ( radians(21.785367) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(118.356734) ) + sin ( radians(21.785367) ) * sin( radians( lat ) ) ) ) AS distance -- 距离
FROM demo
HAVING distance < 463 -- 筛选距离小于463km的(可不写),如果没查到数据就是没有小于463km的
ORDER BY distance -- 根据距离远近来排序 默认升序 (可不写)
LIMIT 0 , 20; -- 显示前20条数据(可不写)eg:
SELECT *,( 6378 * acos ( cos ( radians(21.785367) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(118.356734) ) + sin ( radians(21.785367) ) * sin( radians( lat ) ) ) ) AS distance
FROM demo
HAVING distance < 463
ORDER BY distance
LIMIT 0 , 20;
结果:
多边形
DROP TABLE IF EXISTS `geom`;
CREATE TABLE `geom` (`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,`lnglat` varchar(255) NOT NULL COMMENT '经纬度',PRIMARY KEY (`id`) USING BTREE
) ENGINE = MyISAM CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;INSERT INTO `geom` VALUES (1, "1,1");
INSERT INTO `geom` VALUES (2, "2,2");
INSERT INTO `geom` VALUES (3, "3,3");
INSERT INTO `geom` VALUES (4, "4,4");
INSERT INTO `geom` VALUES (5, "5,5");
INSERT INTO `geom` VALUES (6, "6,6");select`geom`.id, `geom`.lnglat,SUBSTRING_INDEX(`geom`.lnglat,",",1) lng,SUBSTRING_INDEX(`geom`.lnglat,",",-1) lat
from geom
where MBRWithin(ST_GeomFromText(CONCAT( 'POINT(',SUBSTRING_INDEX(`geom`.lnglat,",",1),' ',SUBSTRING_INDEX(`geom`.lnglat,",",-1), ')')),GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'));-----------------------------------------------------------------------------------------下面是简写
pt 代表 POINT(1 1)
select AsText(pt) from geom where MBRWithin(pt,GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'));
select AsText(pt) from geom where MBRContains(GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),pt);
结果:
主要是sql查询符合在圆形,多边形区域经纬度的数据相关推荐
- sql空字符串判断函数_Excel数据还可这样来查询:用SQL查询输出工作表指定区域更高效!...
对于数据库编程的朋友而言,SQL结构化查询技术并不陌生,也非常好用,凭借SQL强大的功能可以有效实现对数据库的数据表数据的"增.删.改.查"操作.一般而言,比较高级的语言环境,例如 ...
- sql查询一段时间(日期)的数据
最近又开始使用到sql查询,我需要查询一段时间的内容,数据库中的时间数据是这样的: 直接对date字段进行查询一段时间的数据,发现查询 出来的结果不对,后来弄清楚是因为数据存储时是根据字符串的形式存储 ...
- Oracle 数据库 - sql语句筛选出符合查询条件的第一条结果实例演示,sql查询结果只显示指定行数的数据方法
默认看到查询条件有 3 条结果,我想只查询出日期最晚的那一条记录. -- 默认查询条件 select settledate as "日期", syscalculationmny a ...
- sql查询出两张表id不同的数据
一开始我写的sql是 SELECT a.id,a.name from zabbix.zabbix_test a,log.log_test b WHERE a.id!=b.id 然后这样写是可以查询正确 ...
- sql查询今年的12个月的统计数据
1.查出1~12 SELECT @xi:=@xi+1 as id from (SELECT 1 UNION SELECT 2 UNION SELECT 3) xc1, (SELECT 1 UNION ...
- oracle查询符合当天并查出每个小时中数据的总数量
SELECTTO_CHAR (TE.MODDATE, 'hh24') AS TT,COUNT (*) AS TOTAL FROMT_B_EXACTDETECT TE --所需查询数据的表名 WHERE ...
- SQL查询入门(上篇)
SQL语言是一门简单易学却又功能强大的语言,它能让你快速上手并写出比较复杂的查询语句.但对于大多数开发者来说,使用SQL查询数据库并没有一个抽象的过程和一个合理的步骤,这很可能会使在写一些特定的SQL ...
- 删除表的sql命令是什么_【技术干货】30个最适合初学者的SQL查询
毫无疑问,SQL或结构化查询语言是最流行的编程语言之一,尤其是因为它具有访问和修改数据库中数据的功能.SQL与数据库接口的基本用法是其流行的最重要原因. 关于SQL的最基本方面之一就是查询.基本上,S ...
- postgre sql 括字段_【技术干货】30个最适合初学者的SQL查询
毫无疑问,SQL或结构化查询语言是最流行的编程语言之一,尤其是因为它具有访问和修改数据库中数据的功能.SQL与数据库接口的基本用法是其流行的最重要原因. 关于SQL的最基本方面之一就是查询.基本上,S ...
最新文章
- 北京大学 微软:预训练模型(Transformer)中的知识神经元
- 今日arXiv精选 | 近期必读的5篇Transformers相关论文
- Eclipse Alt+/ Content Assistant
- PCB布局,布线技巧总结
- C++ primer 第11章 关联容器
- python中update什么意思_如何在Python中更新字典中键的值?
- Hadoop入门基础教程 Hadoop之服务器基础环境搭建
- 为信息产业自主化而奋斗,第一本龙芯平台的Linux内核书来了!
- 网络协议:TCP/IP协议,你看懂了吗?
- java比身高怎么做_D3 Y比例,y对比身高?
- java池模式_JAVA模式 对象池 简要代码示例
- Java实现下载图片
- 硬知识来袭,一文读懂Wi-SUN的前世今生
- javascript根据单元格内容动态合并相同内容单元格
- 电商销量预测方法综述
- 吊打tomcat的高性能web服务器undertow
- 从git上克隆的vue项目在本地运行步骤
- 计网读书笔记day1
- CENTOS上的网络安全工具(七)MYSQL也不能少
- 关于手机和固话号码正则表达式