国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

根據(jù)經(jīng)緯度計(jì)算兩點(diǎn)之間的距離

這篇具有很好參考價(jià)值的文章主要介紹了根據(jù)經(jīng)緯度計(jì)算兩點(diǎn)之間的距離。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

  1. 前言

在我們平時(shí)使用美團(tuán),餓了么等app進(jìn)行訂餐,或者使用貓眼進(jìn)行訂電影票的時(shí)候,都有一個(gè)距離的排序,表明該家店距離我們當(dāng)前的位置,這種基于地理位置的服務(wù),統(tǒng)一被稱為L(zhǎng)BS(Location Based Service),而LBS的實(shí)現(xiàn)則是借助于GIS,WC(無(wú)線通信)等信息技術(shù)來實(shí)現(xiàn)。而今天我們所要討論的就是這個(gè)距離的實(shí)現(xiàn)。

GIS,Geographic information system,地理信息系統(tǒng)。

  1. 計(jì)算方式

由于地球是一個(gè)橢圓形,我們?cè)谟?jì)算的時(shí)候有點(diǎn)麻煩,所以我們更常用的方式是將地球作為一個(gè)球形來計(jì)算,而計(jì)算球面上任意兩點(diǎn)之間的距離的公式通常有兩種:Great-circle distance和Haversine formula,而目前大多數(shù)公司都是用的是Haversine公式,原因可以參考:

Great-circle distance公式用到了大量余弦函數(shù), 而兩點(diǎn)間距離很短時(shí)(比如地球表面上相距幾百米的兩點(diǎn)),余弦函數(shù)會(huì)得出0.999…的結(jié)果, 會(huì)導(dǎo)致較大的舍入誤差。而Haversine公式采用了正弦函數(shù),即使距離很小,也能保持足夠的有效數(shù)字。

而有關(guān)這兩者的介紹可以參考維基百科:Haversine formula 維基百科,Great-circle distance 維基百科。而最終該公式的形式為:

根據(jù)經(jīng)緯度計(jì)算兩點(diǎn)之間的距離

至于為什么是這種形式,其實(shí)目前網(wǎng)上有許多推導(dǎo)公式,感興趣的可以看一下推導(dǎo)過程,順便回憶一下自己當(dāng)年學(xué)過的數(shù)學(xué)知識(shí):
1. 關(guān)于已知兩點(diǎn)經(jīng)緯度求球面最短距離的公式推導(dǎo)
2. 根據(jù)經(jīng)緯度計(jì)算兩點(diǎn)之間的距離的公式推導(dǎo)過程以及google.maps的測(cè)距函數(shù)

而如果要考慮到高度的影響的話,可以參考:https://stackoverflow.com/questions/3694380/calculating-distance-between-two-points-using-latitude-longitude

另外,還有一種方式是 Vincenty’s formulae,該方式也是用于計(jì)算球體表面兩點(diǎn)之間距離的方式,而它所基于的就是地球是扁球體的形狀,因此這種方式比假設(shè)地球是球體的方式應(yīng)該更加準(zhǔn)確,但實(shí)現(xiàn)起來比較麻煩。感興趣的可以查看下維基百科:Vincenty’s formulae 維基百科

接下來說幾點(diǎn)概念:

3.1 地球半徑

由于地球不是一個(gè)完美的球體,所以并不能用一個(gè)特別準(zhǔn)確的值來表示地球的實(shí)際半徑,不過由于地球的形狀很接近球體,用[6357km] 到 [6378km]的范圍值可以涵蓋需要的所有半徑。并且通常情況下,地球半徑有幾個(gè)常用值:

極半徑,從地球中心至南極或北極的距離, 相當(dāng)于6356.7523km;
赤道半徑,從地球中心到赤道的距離,大約6378.137km;
平均半徑,6371.393km,表示地球中心到地球表面所有各點(diǎn)距離的平均值;
RE,地球半徑,有時(shí)被使用作為距離單位, 特別是在天文學(xué)和地質(zhì)學(xué)中常用,大概距離是6370.856km;

所以我們通過地球半徑進(jìn)行計(jì)算的時(shí)候,通常情況下,我們可以使用上面的每一個(gè)值都可以進(jìn)行計(jì)算,不過或多或少都會(huì)有誤差的,但這樣的誤差是也是允許存在的。這里參考自維基百科:維基百科-地球半徑

  1. MySQL實(shí)現(xiàn)

同樣,在MySQL中實(shí)現(xiàn)該功能,計(jì)算公式還是通過Haversine公式。不過在Google Map中,已經(jīng)提供了相應(yīng)的實(shí)現(xiàn)方式,我們先來看一下。

SELECT
	id,
	(
		3959 * acos(
			cos( radians( 37 ) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(- 122 ) ) + sin( radians( 37 ) ) * sin( radians( lat ) ) 
		) 
	) AS distance 
FROM
	markers 
HAVING
	distance < 25 
ORDER BY
	distance 
	LIMIT 0,
	20;

而如果我們要查詢公里,將3959英里也就是地球半徑,修改為6371即可。

Google Maps地址:Creating a Store Locator on Google Maps php&MySQL

4.2 st_distance函數(shù)

MySQL其實(shí)在很早就提供了這種存儲(chǔ)經(jīng)緯度及相關(guān)運(yùn)算的功能,這種數(shù)據(jù)類型叫做空間數(shù)據(jù)類型,而對(duì)應(yīng)的索引被稱為空間索引,但由于MySQL之前的版本對(duì)InnoDB支持的并不是太好,所以使用的并不多。不過MySQL5.6和MySQL5.7對(duì)此進(jìn)行了優(yōu)化,添加了st_distance等相關(guān)函數(shù)來支持經(jīng)緯度相關(guān)的計(jì)算。

SELECT
	s.*,
	( st_distance ( point ( lng, lat ), point (- 122.083235, 37.38714 ) ) * 111195 ) AS distance 
FROM
	markers s 
ORDER BY
	distance

其中,point是MySQL的空間數(shù)據(jù)類型,先不多說這塊。就這樣,我們只需要通過st_distance函數(shù)就計(jì)算出了我們所需要查詢的結(jié)果,不過這里需要說一下:

st_distance 函數(shù)返回的單位是degrees,也就是空間單位的度數(shù),我們?nèi)绻獙egrees轉(zhuǎn)換為米或者千米的話,需要乘以 EARTH_RADIUS * PI/180, EARTH_RADIUS 也就是地球半徑,至于是米還是千米,就看該變量的單位。
該運(yùn)算其實(shí)就相當(dāng)于對(duì)地球半徑進(jìn)行弧度與角度的轉(zhuǎn)換,也就是Math.toRadians,而上面我們寫的111195其實(shí)是一個(gè)有誤差的值,該值就是通過該計(jì)算得出的結(jié)果。

其實(shí),MySQL有提供直接查詢結(jié)果是米的函數(shù):st_distance_sphere,并且該函數(shù)的計(jì)算結(jié)果要比st_distance轉(zhuǎn)換為米的結(jié)果更精確。不過該函數(shù)是MySQL5.7之后才引入的,5.7之前還是需要通過計(jì)算轉(zhuǎn)換成米。更多可參考官方文檔地址:MySQL 5.7 ST_Distance_Sphere(g1, g2 [, radius])

5 Geohash算法

Geohash是目前比較主流的范圍搜索的算法,比如說搜索附近500米內(nèi)的地點(diǎn)這種問題。Geohash算法將二維的經(jīng)緯度編碼為一個(gè)字符串,每個(gè)字符串代表了某一矩形區(qū)域,也就是說,這個(gè)矩形區(qū)域內(nèi)所有的點(diǎn)(經(jīng)緯度坐標(biāo))都共享相同的GeoHash字符串,這樣在查詢的時(shí)候就可以對(duì)該字符串做索引,然后根據(jù)該字符串進(jìn)行過濾。

Geohash算法的最大用途其實(shí)就是附近地址搜索了,不過,從geohash的編碼算法中可以看出它的一個(gè)缺點(diǎn),也就是邊界問題:雖然兩個(gè)地點(diǎn)距離很近,但恰好位于分界點(diǎn)的兩側(cè),這樣geohash字符串就會(huì)不相同,然后匹配的時(shí)候就會(huì)有問題。不過要解決這個(gè)問題也很簡(jiǎn)單,就是計(jì)算的時(shí)候,計(jì)算出8個(gè)分別分布在周圍8個(gè)區(qū)域的地點(diǎn)。

原文文章來源地址http://www.zghlxwxcb.cn/news/detail-448157.html

到了這里,關(guān)于根據(jù)經(jīng)緯度計(jì)算兩點(diǎn)之間的距離的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java:計(jì)算地球上兩個(gè)經(jīng)緯度坐標(biāo)之間的距離-geodesy和geotools實(shí)現(xiàn)

    兩個(gè)點(diǎn)的經(jīng)緯度 latitude緯度 longitude經(jīng)度 地點(diǎn) 22.678611 113.805695 深圳同泰萬(wàn)怡酒店 22.716473 113.826391 深圳寶安中天美景華美達(dá)酒店 各種計(jì)算方式 計(jì)算方式 距離 Elasticsearch:7.12.1 4715.088099751495 自定義公式計(jì)算 4720.367727793572 org.gavaghan/geodesy 4715.085736444097 org.geotools/gt-referencing 4701.260

    2024年02月02日
    瀏覽(27)
  • 微信小程序如何使用地球半徑計(jì)算兩組經(jīng)緯度點(diǎn)之間的距離(自身位置與接口返回位置)【上】

    微信小程序如何使用地球半徑計(jì)算兩組經(jīng)緯度點(diǎn)之間的距離(自身位置與接口返回位置)【上】

    目錄 1.配置位置權(quán)限? 2.獲取當(dāng)前自身經(jīng)緯度? 3. 請(qǐng)求接口拿到返回經(jīng)緯 4. 循環(huán)取每一項(xiàng)的經(jīng)緯 5.如何判斷是否打開了定位權(quán)限? 6.進(jìn)行距離計(jì)算操作? 7.運(yùn)行效果 8.完整代碼 首先在使用小程序時(shí),請(qǐng)求的接口一定要去配置合法域名,才能夠進(jìn)行接下來的操作。? 在app.json中添

    2024年02月06日
    瀏覽(24)
  • ElasticSearch - 根據(jù)經(jīng)緯度,簡(jiǎn)單搜索指定距離范圍內(nèi)的數(shù)據(jù)

    ElasticSearch - 根據(jù)經(jīng)緯度,簡(jiǎn)單搜索指定距離范圍內(nèi)的數(shù)據(jù)

    ES的地圖檢索方式 ES支持的地圖檢索方式有以下幾種; geo_distance geo_bounding_box geo_polygon 1、 geo_distance :直線距離檢索,如給定點(diǎn)A,要求返回地圖上距離點(diǎn)A三千米的商家(點(diǎn)外賣場(chǎng)景) 2、查找索引內(nèi)距離北京站(116.433733,39.908404)3000米內(nèi)的點(diǎn) geo_distance涉及的參數(shù)如下 location:確

    2024年02月14日
    瀏覽(17)
  • 【Python】一行代碼計(jì)算兩經(jīng)緯度點(diǎn)的距離及夾角

    【Python】一行代碼計(jì)算兩經(jīng)緯度點(diǎn)的距離及夾角

    2022.2.10更新,Python有現(xiàn)成的包可以直接調(diào)用。 geographiclib庫(kù) https://pypi.org/project/geographiclib/ 用法說明見博客: python 計(jì)算地球上兩點(diǎn)距離和方位角(bearing)的包geographiclib_梓沂的博客-CSDN博客_geodesic python 通過經(jīng)緯度計(jì)算地圖上兩點(diǎn)的距離及方位角,百度的結(jié)果是許多個(gè)人寫的函

    2023年04月11日
    瀏覽(18)
  • 高德地圖根據(jù)經(jīng)緯度獲取地址信息

    高德地圖根據(jù)經(jīng)緯度獲取地址信息

    主要是使用高德里面 地理編碼與逆地理編碼 的 getAddress 這個(gè)方法, 根據(jù)逆向地理編碼:將地理坐標(biāo)(經(jīng)緯度)轉(zhuǎn)換成地址描述信息,對(duì)應(yīng)為AMap.Geocoder的getAddress方法。 具體使用的代碼為 最后看效果 這是傳的經(jīng)緯度與解析出來的地理位置 如果需要正向解析將地理位置變成經(jīng)

    2024年02月11日
    瀏覽(23)
  • 高德根據(jù)經(jīng)緯度,查詢所在位置信息

    高德根據(jù)經(jīng)緯度,查詢所在位置信息

    根據(jù)JSON對(duì)象獲取信息 String cityInfo = GaoDeUtils.getAddressByJWD(request.getClog(), request.getClat()); JSONObject resultSucces = JSONObject.parse(cityInfo); JSONObject addr=resultSucces.getJSONObject(“regeocode”); AddressComponent addressComponent = JSON.parseObject(JSON.toJSONString(addr.get(“addressComponent”)), AddressComponent.class); 創(chuàng)

    2024年02月08日
    瀏覽(19)
  • 高德百度騰訊之間經(jīng)緯度的轉(zhuǎn)換

    高德百度騰訊之間經(jīng)緯度的轉(zhuǎn)換

    提示:這里可以添加本文要記錄的大概內(nèi)容: 提示:以下是本篇文章正文內(nèi)容,下面案例可供參考 百度地圖: 高德地圖: 騰訊地圖 最后轉(zhuǎn)換結(jié)果 可知,高德和騰訊使用的編碼方式是一樣的,所以最后轉(zhuǎn)換的經(jīng)緯度基本一樣

    2024年02月13日
    瀏覽(24)
  • NC文件根據(jù)經(jīng)緯度提取點(diǎn)上數(shù)值

    NC文件根據(jù)經(jīng)緯度提取點(diǎn)上數(shù)值

    Hello,Hello,Hello,大家好,時(shí)隔上一次更新已經(jīng)很久了,今天主要和大家分享一組簡(jiǎn)單的代碼,來提取NC文件中某一點(diǎn)的數(shù)值! 本次實(shí)例數(shù)據(jù)依舊使用喜聞樂見的NCEP數(shù)據(jù),數(shù)據(jù)使用的是多層氣溫?;蛘呖梢灾苯狱c(diǎn)擊這里下載 這個(gè)就是下載好的數(shù)據(jù): 大家可以看一下,這個(gè)數(shù)

    2024年02月05日
    瀏覽(34)
  • Python根據(jù)經(jīng)緯度在地圖上顯示(folium)

    Python根據(jù)經(jīng)緯度在地圖上顯示(folium)

    1、location地圖中心點(diǎn) 經(jīng)緯度,list 或者 tuple 格式,順序?yàn)?latitude(緯度), longitude(經(jīng)度) 2、zoom_start地圖等級(jí) 縮放值,默認(rèn)為 10,值越大比例尺越小,地圖放大級(jí)別越大 3、tiles 顯示樣式,默認(rèn)*‘OpenStreetMap’*,也就是開啟街道顯示;也有一些其他的內(nèi)建地圖樣式,如’Stamen T

    2024年02月14日
    瀏覽(42)
  • uniapp結(jié)合Canvas+renderjs根據(jù)經(jīng)緯度繪制軌跡(二)

    uniapp結(jié)合Canvas+renderjs根據(jù)經(jīng)緯度繪制軌跡(二)

    ? 根據(jù)官方建議要想在 app-vue 流暢使用 Canvas 動(dòng)畫,需要使用 renderjs 技術(shù),把操作 canvas 的js邏輯放到視圖層運(yùn)行,避免邏輯層和視圖層頻繁通信。 這里呢結(jié)合 renderjs 技術(shù)實(shí)現(xiàn)繪制軌跡圖形。 你可能需要先了解 renderjs 如何數(shù)據(jù)通訊:renderjs 與 app-vue之間數(shù)據(jù)交互 html中使用

    2024年02月11日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包