电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

利用MySQL空間函數(shù)實(shí)現(xiàn)位置打卡的完整步驟

瀏覽:8日期:2023-10-12 19:27:24

前言

項(xiàng)目需求是跟用戶當(dāng)前位置判斷是否在給定的地理位置范圍內(nèi),符合位置限制才可以打卡,其中的位置范圍是一個(gè)或多個(gè)不規(guī)則的多邊形。如下圖,判斷用戶是在清華還是北大。

利用MySQL空間函數(shù)實(shí)現(xiàn)位置打卡的完整步驟

圖形獲取區(qū)域坐標(biāo)#

因?yàn)轫?xiàng)目前端使用微信小程序的wx.getLocation獲取地理位置,為了坐標(biāo)的一致性,后臺(tái)選取區(qū)域范圍采用了騰訊地圖的地理位置服務(wù),在應(yīng)用工具->繪制幾何圖形里,提供了點(diǎn)、線、多邊形和圓形可以方便的選取看這里。

在官方提供的示例上稍加改動(dòng)即可獲取選定的位置坐標(biāo)。

利用MySQL空間函數(shù)實(shí)現(xiàn)位置打卡的完整步驟

存儲(chǔ)位置

取到坐標(biāo)位置后,接著就是怎么存儲(chǔ)?

開(kāi)放地理空間聯(lián)盟(OGC)是一個(gè)由 250多家公司,機(jī)構(gòu)和大學(xué)組成的國(guó)際聯(lián)盟,參與開(kāi)發(fā)公開(kāi)可用的空間解決方案,這些解決方案可用于管理空間數(shù)據(jù)的各種應(yīng)用程序。OGC發(fā)布了地理信息的 OpenGIS®Implementation 標(biāo)準(zhǔn),該規(guī)范可從 OGC 網(wǎng)站http://www.opengeospatial.org/standards/sfs獲得。為了遵循 OGC 規(guī)范,MySQL 將空間 extensions 實(shí)現(xiàn)為具有 Geometry Types 環(huán)境的 SQL 的子集,提供生成、存儲(chǔ)、分析空間的功能。總之,MySQL可以滿足我們的需求。MySQL提供單個(gè)的存儲(chǔ)類(lèi)型 POINT、LINESTRING、POLYGON 對(duì)應(yīng)幾何圖形點(diǎn)、線、多邊形,GEOMETRY 可以存儲(chǔ)三種中的任何一種。同時(shí)擁有存儲(chǔ)多種類(lèi)型的能力, MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION依次對(duì)應(yīng)單個(gè)圖形的復(fù)數(shù)。

回到項(xiàng)目中,我們用到的是 POLYGON ,

建表語(yǔ)句 如下:

CREATE TABLE `polygon` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `polygon` polygon NOT NULL, PRIMARY KEY (`id`), SPATIAL KEY `d` (`polygon`)) DEFAULT CHARSET=utf8;

插入數(shù)據(jù)

MySQL 支持將Well-Known 文本(WKT)格式和Well-Known 二進(jìn)制(WKB)格式兩種格式轉(zhuǎn)換為object類(lèi)型存儲(chǔ)起來(lái),我們使用更易于理解的WKT格式。對(duì)WKB感興趣的可以看這里。

插入語(yǔ)句如下:

INSERT INTO `polygon` VALUES (’1’, ’清華大學(xué)’, GeomFromText(’POLYGON((40.01169924229143 116.31565081888039,39.99304082299905 116.31616541796757,39.99343506780591 116.33297565023167,40.00237067000859 116.33743550702275,40.01340715321479 116.33057418815224,40.01169924229143 116.31565081888039))’));INSERT INTO `polygon` VALUES (’2’, ’北京大學(xué)’, GeomFromText(’POLYGON((39.99711457525893 116.30450117461078,39.98673259872773 116.30535884106575,39.98673259872773 116.31702308311287,39.99963848242885 116.31598375134854,39.99711457525893 116.30450117461078))’));

需要注意的是騰訊地圖返回的多邊形的點(diǎn)不是閉合的,而polygon函數(shù)需要為了確定多邊形是否閉合要求第一個(gè)點(diǎn)和最后一個(gè)點(diǎn)是一樣的。如果不是閉合的polygon返回的結(jié)果將是NULL,插入語(yǔ)句就會(huì)執(zhí)行失敗。

如果幾何滿足諸如此(非窮舉)列表中的條件,則它在語(yǔ)法上是 well-formed:

線串至少有兩個(gè)點(diǎn) 多邊形至少有一個(gè)環(huán) 多邊形環(huán)關(guān)閉(第一個(gè)和最后一個(gè)點(diǎn)相同) 多邊形環(huán)至少有 4 個(gè)點(diǎn)(最小多邊形是一個(gè)三角形,第一個(gè)和最后一個(gè)點(diǎn)相同) 集合不為空(除了GeometryCollection)

查詢判斷

SELECT * FROM polygon WHEREMBRWithin (ST_GeomFromText(’POINT(39.991333490218544 116.30964748487895)’), polygon);# 在北京大學(xué)SELECT * FROM polygon WHEREMBRWithin (ST_GeomFromText(’POINT(39.988967560246685 116.3286905102832)’), polygon);# 不在北大

細(xì)心的同學(xué)可能發(fā)現(xiàn)了這里的查詢語(yǔ)句里用的是函數(shù),在以往的SQL里如果存在查詢字段上使用函數(shù)必然導(dǎo)致索引失效、全表掃描,但是在空間數(shù)據(jù)上不會(huì),先看 EXPLAIN 語(yǔ)句和結(jié)果:

利用MySQL空間函數(shù)實(shí)現(xiàn)位置打卡的完整步驟

可見(jiàn)MySQL空間類(lèi)型的數(shù)據(jù)同樣可以建立索引,使用的關(guān)鍵詞是 SPATIAL

用法如下:

CREATE TABLE geom (g GEOMETRY NOT NULL);CREATE SPATIAL INDEX g ON geom (g);

常用的空間計(jì)算函數(shù)

1、判斷兩點(diǎn)之間的距離

ST_Distance(g1,g2),返回g1和g2之間的距離。如果任一參數(shù)是NULL或空幾何,則 return value 為NULL。

2、圖形1是否完全包含圖形2

ST_Contains(g1,g2),返回 1 或 0 以指示g1是否完全包含g2。還可以用ST_Within(g2,g1)達(dá)到相同的效果。

3、不相交

ST_Disjoint(g1,g2),返回 1 或 0 以指示g1是否在空間上與(不相交)g2不相交。

4、關(guān)于圖形相交的情況比較復(fù)雜,包含重疊、外相交等情況,具體可以看這里

總結(jié)

本文通過(guò)一個(gè)地理位置打卡的需求,使用 MySQL 自帶的 Polygon 數(shù)據(jù)類(lèi)型實(shí)現(xiàn)了空間數(shù)據(jù)的存儲(chǔ),用ST_Contains(g1,g2) 函數(shù)代入了后臺(tái)預(yù)置的地理區(qū)域和前端獲取到的用戶地理位置可以得出用戶是否在打卡范圍內(nèi)。其中還涉及到了 MySQL 在使用函數(shù)作為查詢字段的情況下依然可以使用索引,最后延伸了一些其他的空間處理函數(shù)。

到此這篇關(guān)于利用MySQL空間函數(shù)實(shí)現(xiàn)位置打卡的文章就介紹到這了,更多相關(guān)MySQL空間函數(shù)位置打卡內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: MySQL 數(shù)據(jù)庫(kù)
相關(guān)文章:
主站蜘蛛池模板: 证券新闻,热播美式保罗1984第二部_腾讯1080p-仁爱影院 | 除甲醛公司-甲醛检测-广西雅居环境科技有限公司 | 定制奶茶纸杯_定制豆浆杯_广东纸杯厂_[绿保佳]一家专业生产纸杯碗的厂家 | 上海租奔驰_上海租商务车_上海租车网-矢昂汽车服务公司 | 3A别墅漆/3A环保漆_广东美涂士建材股份有限公司【官网】 | 浙江筋膜枪-按摩仪厂家-制造商-肩颈按摩仪哪家好-温州市合喜电子科技有限公司 | 包装设计公司,产品包装设计|包装制作,包装盒定制厂家-汇包装【官方网站】 | 手板_手板模型制作_cnc手板加工厂-东莞天泓 | 深圳快餐店设计-餐饮设计公司-餐饮空间品牌全案设计-深圳市勤蜂装饰工程 | 安全阀_弹簧式安全阀_美标安全阀_工业冷冻安全阀厂家-中国·阿司米阀门有限公司 | 依维柯自动挡房车,自行式国产改装房车,小型房车价格,中国十大房车品牌_南京拓锐斯特房车 - 南京拓锐斯特房车 | 天津货架厂_穿梭车货架_重型仓储货架_阁楼货架定制-天津钢力仓储货架生产厂家_天津钢力智能仓储装备 | 华夏医界网_民营医疗产业信息平台_民营医院营销管理培训 | PC构件-PC预制构件-构件设计-建筑预制构件-PC构件厂-锦萧新材料科技(浙江)股份有限公司 | 消泡剂-水处理消泡剂-涂料消泡剂-切削液消泡剂价格-东莞德丰消泡剂厂家 | 昆山新莱洁净应用材料股份有限公司-卫生级蝶阀,无菌取样阀,不锈钢隔膜阀,换向阀,离心泵 | 安规_综合测试仪,电器安全性能综合测试仪,低压母线槽安规综合测试仪-青岛合众电子有限公司 | 西安微信朋友圈广告投放_微信朋友圈推广_西安度娘网络科技有限公司 | 天长市晶耀仪表有限公司| UV固化机_UVLED光固化机_UV干燥机生产厂家-上海冠顶公司专业生产UV固化机设备 | 慈溪麦田广告公司,提供慈溪广告设计。| 华中线缆有限公司-电缆厂|电缆厂家|电线电缆厂家 | 学校用栓剂模,玻璃瓶轧盖钳,小型安瓿熔封机,实验室安瓿熔封机-长沙中亚制药设备有限公司 | 临沂招聘网_人才市场_招聘信息_求职招聘找工作请认准【马头商标】 | 齿轮减速电机一体机_蜗轮蜗杆减速马达-德国BOSERL齿轮减速机带电机生产厂家 | 商秀—企业短视频代运营_抖音企业号托管 | 翅片管换热器「型号全」_厂家-淄博鑫科环保 | 不锈钢列管式冷凝器,换热器厂家-无锡飞尔诺环境工程有限公司 | ph计,实验室ph计,台式ph计,实验室酸度计,台式酸度计 | 自清洗过滤器_全自动过滤器_全自动反冲洗过滤器_量子过滤器-滑漮滴 | 集装箱展厅-住人集装箱住宿|建筑|房屋|集装箱售楼处-山东锐嘉科技工程有限公司 | 煤矿支护网片_矿用勾花菱形网_缝管式_管缝式锚杆-邯郸市永年区志涛工矿配件有限公司 | 网优资讯-为循环资源、大宗商品、工业服务提供资讯与行情分析的数据服务平台 | 碳纤维复合材料制品生产定制工厂订制厂家-凯夫拉凯芙拉碳纤维手机壳套-碳纤维雪茄盒外壳套-深圳市润大世纪新材料科技有限公司 | 运动木地板价格,篮球馆体育运动木地板生产厂家_欧氏地板 | 锂电混合机-新能源混合机-正极材料混料机-高镍,三元材料混料机-负极,包覆混合机-贝尔专业混合混料搅拌机械系统设备厂家 | 南京精锋制刀有限公司-纵剪机刀片_滚剪机刀片_合金刀片厂家 | 深圳美安可自动化设备有限公司,喷码机,定制喷码机,二维码喷码机,深圳喷码机,纸箱喷码机,东莞喷码机 UV喷码机,日期喷码机,鸡蛋喷码机,管芯喷码机,管内壁喷码机,喷码机厂家 | 天津仓储物流-天津电商云仓-天津云仓一件代发-博程云仓官网 | 硫化罐-胶管硫化罐-山东鑫泰鑫智能装备有限公司 | 冷藏车厂家|冷藏车价格|小型冷藏车|散装饲料车厂家|程力专用汽车股份有限公司销售十二分公司 |