天堂国产午夜亚洲专区-少妇人妻综合久久蜜臀-国产成人户外露出视频在线-国产91传媒一区二区三区

當(dāng)前位置:主頁(yè) > 論文百科 > 教案模板 >

MySQL空間數(shù)據(jù)庫(kù)–查詢點(diǎn)到多點(diǎn)間的最短路徑

發(fā)布時(shí)間:2017-03-27 13:16

  本文關(guān)鍵詞:空間參考系,由筆耕文化傳播整理發(fā)布。


當(dāng)SNS產(chǎn)品加入LBS的技術(shù)將會(huì)讓移動(dòng)互聯(lián)網(wǎng)領(lǐng)域更加豐富多彩,例如:大眾點(diǎn)評(píng),街旁,盛大切客 這些運(yùn)行在智能手機(jī)端的應(yīng)用,當(dāng)用戶拿出手機(jī)就可以根據(jù)你當(dāng)前的所在地向你推薦一些有用的信息,例如:附近的美食,商鋪,周邊生活信息,等。 攻城師們,你有沒有

當(dāng)SNS產(chǎn)品加入LBS的技術(shù)將會(huì)讓移動(dòng)互聯(lián)網(wǎng)領(lǐng)域更加豐富多彩,例如:大眾點(diǎn)評(píng),街旁,盛大切客 這些運(yùn)行在智能手機(jī)端的應(yīng)用,當(dāng)用戶拿出手機(jī)就可以根據(jù)你當(dāng)前的所在地向你推薦一些有用的信息,例如:附近的美食,商鋪,周邊生活信息,等。

攻城師們,你有沒有想過這些應(yīng)用背后的技術(shù)實(shí)現(xiàn)呢?手機(jī)端獲得當(dāng)前的坐標(biāo)后是怎么進(jìn)行計(jì)算和查詢返回附件的結(jié)果呢?

用Java程序可以實(shí)現(xiàn)Dijkstra算法獲得點(diǎn)與多點(diǎn)之間最短路徑的計(jì)算結(jié)果,但是我個(gè)人認(rèn)為是一種暴力的方法,開發(fā)的簡(jiǎn)化程度和計(jì)算的執(zhí)行效率不會(huì)非常高。
參考資料:

接著再往下想,用到數(shù)據(jù)庫(kù)技術(shù)是必然,但不會(huì)把節(jié)點(diǎn)的坐標(biāo)信息存儲(chǔ)到數(shù)據(jù)庫(kù)普通的字段中進(jìn)行查詢,如果和Dijkstra算法相比不會(huì)簡(jiǎn)化工作量也不會(huì)提高性能,但使用到MySQL中空間數(shù)據(jù)庫(kù)的概念就會(huì)簡(jiǎn)化很多也會(huì)得到性能的提升,開源的MySQL Spatial空間索引機(jī)制就可以對(duì)點(diǎn)到多點(diǎn)之間的距離計(jì)算,類似的Spatial Database還有,PostGIS,SpatiaLite。

我的廢話:
在android手機(jī)上獲得當(dāng)前坐標(biāo)后,將數(shù)據(jù)整好錄入android中的SQLite數(shù)據(jù)庫(kù)也可以獲得當(dāng)前點(diǎn)對(duì)多點(diǎn)的最短路徑,也就是說在地理數(shù)據(jù)不會(huì)更新的場(chǎng)景下完全可以采用android手機(jī)上的數(shù)據(jù)庫(kù)完成這項(xiàng)工作,沒有必要非要利用服務(wù)器端的Spatial Database完成最短路徑的計(jì)算。

MySQL空間數(shù)據(jù)幾種主要類型:
     – GEOMETRY  Geometry是層次結(jié)構(gòu)的根類。它是一種非實(shí)例化類,但具有很多屬性,,這些屬性對(duì)由任何Geometry子類創(chuàng)建的所有幾何值來(lái)說是共同的。
     – POINT   代表坐標(biāo)空間中單個(gè)位置的幾何類,他的屬性包含 X-坐標(biāo)值,Y-坐標(biāo)值。
     – LINESTRING  具有線段的坐標(biāo),由每個(gè)連續(xù)的點(diǎn)對(duì)(兩點(diǎn))定義。如果僅包含兩點(diǎn),LineString為L(zhǎng)ine。 如果它既是簡(jiǎn)單的也是封閉的,LineString為L(zhǎng)inearRing。
     – POLYGON  它由單個(gè)外部邊界以及0或多個(gè)內(nèi)部邊界定義,其中,每個(gè)內(nèi)部邊界定義為Polygon中的1個(gè)孔。例如:在地區(qū)地圖上,Polygon對(duì)象可表示森林。
     – MULTIPOINT  MultiPoint是一種由Point元素構(gòu)成的幾何對(duì)象集合。這些點(diǎn)未以任何方式連接或排序。
     – MULTILINESTRING  MultiLineString是一種由 LineString元素構(gòu)成的MultiCurve幾何對(duì)象集合,例如:河流體系或高速路系統(tǒng)。
     – MULTIPOLYGON  MultiPolygon是一種由Polygon元素構(gòu)成的幾何對(duì)象集合。在地區(qū)地圖上,MultiPolygon可表示湖泊系統(tǒng)。
     – GEOMETRYCOLLECTION   他是由1個(gè)或多個(gè)任意類幾何對(duì)象構(gòu)成的幾何對(duì)象。GeometryCollection中的所有元素必須具有相同的空間參考系(即相同的坐標(biāo)系).
以上幾種的類型依賴關(guān)系,如圖所示:

MySQL空間數(shù)據(jù)庫(kù)–查詢點(diǎn)到多點(diǎn)間的最短路徑

了解過上述一些基本知識(shí),下面來(lái)創(chuàng)建一張商戶表,并且包含定義的空間數(shù)據(jù)庫(kù)的POINT字段:
  Create table shop (
     shop_id int(3) primary key,
     Location POINT,
     Shop_na vachar(100),
     Shop_info vachar(300)
     );

插入幾條商家的門店信息,其中采用GeomFromText方法將坐標(biāo)的數(shù)據(jù)庫(kù)插入POINT字段中,例如:
insert into shop values (‘XXX’,’,GeomFromText(‘POINT(1 1)’),’XX店’,’ '其他信息');
下面將根據(jù)客戶當(dāng)前所在位置在MySQL中查詢,搜索出在當(dāng)前位置附近的一定范圍內(nèi)的門店,并且可以做到按距離由近到遠(yuǎn)排列顯示出來(lái),從讓用戶而找到離他最近的門店。
把客戶當(dāng)前所在位置可設(shè)成變量 ,例如:set @center=GeomFromText(‘POINT(10 10)’);

再把要找到最近門店可以縮小搜索范圍 設(shè)半徑,添加搜索條件
例:set @radius=30;
WHERE SQRT(POW( ABS( X(location) – X(@center)), 2) + POW( ABS(Y(location) – Y(@center)), 2 )) < @radius

最近門店搜索,完整的SQL示例:
SELECT shop_id,shop_na, SQRT(POW( ABS( X(Location) – X(@center)), 2) + POW(ABS(Y(Location) – Y(@center)), 2 )) AS distance
FROM shop WHERE SQRT(POW( ABS( X(location) – X(@center)), 2) + POW( ABS(Y(location) – Y(@center)), 2 )) < @radius
order by distance;

其中涉及的數(shù)學(xué)函數(shù)SQRT(x):表示求一個(gè)數(shù)x的平方根。POW(x,y):包含兩個(gè)參數(shù)表示求x的y次冪。ABS(x):表示求數(shù)X的絕對(duì)值。整個(gè)SQRT(POW( ABS( X(Location) – X(@center)), 2) + POW(ABS(Y(Location) – Y(@center)), 2 ))這個(gè)SQL語(yǔ)句實(shí)現(xiàn)的是一個(gè)算術(shù)表達(dá)式

MySQL空間數(shù)據(jù)庫(kù)–查詢點(diǎn)到多點(diǎn)間的最短路徑


即兩點(diǎn)間的直線距離。
比如說現(xiàn)在有兩個(gè)點(diǎn)坐標(biāo)A(x1,y1),B(x2,y2) 要求線段AB長(zhǎng)度 就是用

MySQL空間數(shù)據(jù)庫(kù)–查詢點(diǎn)到多點(diǎn)間的最短路徑

這個(gè)公式去計(jì)算。把A看成當(dāng)前位置B看成一個(gè)門店,不就是相當(dāng)于計(jì)算當(dāng)前位置到門店這兩個(gè)點(diǎn)的距離嗎。坐標(biāo)點(diǎn)有了帶進(jìn)去就行,等于現(xiàn)在只要能用函數(shù)把這個(gè)公式表示出來(lái)就可以了。
所以用到這三個(gè)函數(shù):
SQRT(x):表示求一個(gè)數(shù)x的平方根。就相當(dāng)于那個(gè)根號(hào)!蘹
POW(x,y):包含兩個(gè)參數(shù)表示求x的y次冪
例如pow(2,3)就表示23,那么POW((X1-X2),2)就相當(dāng)于〖(x1-x2)〗^2
ABS(x):表示求數(shù)X的絕對(duì)值。|x|  ABS(x1-x2)就等于|x1-x2|.

根據(jù)那個(gè)公式組合起來(lái)就行了
整個(gè)SQRT(POW( ABS( X(Location) – X(@center)), 2) + POW(ABS(Y(Location) – Y(@center)), 2))這句話就是用來(lái)表示這個(gè)公式的

MySQL空間數(shù)據(jù)庫(kù)–查詢點(diǎn)到多點(diǎn)間的最短路徑

,
這個(gè)公式計(jì)算得出來(lái)的值就是兩點(diǎn)間的直線距離。

參考資料:

口水:
 以上部分內(nèi)容來(lái)自 NJ-AMT 實(shí)習(xí)生余珊的分析報(bào)告。

–end–



  本文關(guān)鍵詞:空間參考系,由筆耕文化傳播整理發(fā)布。



本文編號(hào):270476

資料下載
論文發(fā)表

本文鏈接:http://sikaile.net/wenshubaike/jajx/270476.html


Copyright(c)文論論文網(wǎng)All Rights Reserved | 網(wǎng)站地圖 |

版權(quán)申明:資料由用戶ea5af***提供,本站僅收錄摘要或目錄,作者需要?jiǎng)h除請(qǐng)E-mail郵箱bigeng88@qq.com