乱码乱a∨中文字幕,在线免费激情视频,亚洲欧美久久夜夜潮,国产在线网址

  1. <sub id="hjl7n"></sub>

    1. <sub id="hjl7n"></sub>

      <legend id="hjl7n"></legend>

      當(dāng)前位置:首頁 >  站長(zhǎng) >  數(shù)據(jù)庫 >  正文

      postgresql 計(jì)算兩點(diǎn)距離的2種方法小結(jié)

       2021-05-28 16:33  來源: 腳本之家   我來投稿 撤稿糾錯(cuò)

        阿里云優(yōu)惠券 先領(lǐng)券再下單

      這篇文章主要介紹了postgresql 計(jì)算兩點(diǎn)距離的2種方法小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧。

      postgresql計(jì)算兩點(diǎn)距離

      下面兩種方法:

      select
      ST_Distance(
       ST_SetSRID(ST_MakePoint(115.97166453999147,28.716493914230423),4326)::geography,
       ST_SetSRID(ST_MakePoint(106.00231199774656,29.719258550486572),4326)::geography
      ),
      ST_Length(
       ST_MakeLine(
       ST_MakePoint(115.97166453999147,28.716493914230423),
       ST_MakePoint(106.00231199774656,29.719258550486572)
       )::geography
      )

       

      備注:

      ST_GeomFromText('LINESTRING(115.97166453999147 28.716493914230423,106.00231199774656 29.719258550486572)')與
      ST_MakeLine(
       ST_MakePoint(115.97166453999147,28.716493914230423),
       ST_MakePoint(106.00231199774656,29.719258550486572)
      )等價(jià)
       
      ST_GeomFromText('POINT(115.97166453999147 28.716493914230423)',4326)與
      ST_SetSRID(ST_MakePoint(115.97166453999147,28.716493914230423),4326)等價(jià)
       
      ST_SetSRID(ST_MakePoint(115.97166453999147,28.716493914230423),4326)::geography與
      Geography(ST_SetSRID(ST_MakePoint(115.97166453999147,28.716493914230423),4326))、
      ST_GeographyFromText('SRID=4326;POINT(115.97166453999147 28.716493914230423)')等價(jià)
      (::geography是postgis中的轉(zhuǎn)換類型語法,把geometry轉(zhuǎn)成geography)

       

      補(bǔ)充:postgresql計(jì)算兩點(diǎn)歐式距離(經(jīng)緯度地理位置)

      我就廢話不多說了,大家還是直接看代碼吧~

      create or replace function getdistance
      (
       lon1 numeric,
       lat1 numeric,
       lon2 numeric,
       lat2 numeric
      )
      returns int
      as
      $body$
      declare
      v_distance numeric;
      v_earth_radius numeric;
      radLat1 numeric;
      radLat2 numeric;
      v_radlatdiff numeric;
      v_radlngdiff numeric;
      begin
       --地球半徑
       v_earth_radius:=6378137;
       
       radLat1 := lat1 * pi()/180.0;
       radLat2 := lat2 * pi()/180.0;
       v_radlatdiff := radLat1 - radLat2;
       v_radlngdiff := lon1 * pi()/180.0 - lon2 * pi()/180.0;
       v_distance := 2 * asin(sqrt(power(sin(v_radlatdiff / 2), 2) + cos(radLat1) * cos(radLat2) * power(sin(v_radlngdiff/2),2)));
       v_distance := round(v_distance * v_earth_radius);
       return v_distance;
      end;
      $body$
      language 'plpgsql' volatile;

       

      create or replace function getdistance
      (
       i_lngbegin real,
       i_latbegin real,
       i_lngend real,
       i_latend real
      )
      returns float
      as
      $body$
      /*
       *
       * select getdistance_bygispoint(116.281524,39.957202,117.648673,38.42584) as distance;
       * */
      declare
      v_distance real;
      v_earth_radius real;
      v_radlatbegin real;
      v_radlatend real;
      v_radlatdiff real;
      v_radlngdiff real;
      begin
       --地球半徑
       v_earth_radius:=6378.137;
       
       v_radlatbegin := i_latbegin * pi()/180.0;
       v_radlatend := i_latend * pi()/180.0;
       v_radlatdiff := v_radlatbegin - v_radlatend;
       v_radlngdiff := i_lngbegin * pi()/180.0 - i_lngend * pi()/180.0;
       v_distance := 2 * asin(sqrt(power(sin(v_radlatdiff / 2), 2) + cos(v_radlatbegin) * cos(v_radlatend) * power(sin(v_radlngdiff/2),2)));
       v_distance := v_distance * v_earth_radius*1000;
       return v_distance;
      end;
      $body$
      language 'plpgsql' volatile;

      v_distance; end;$body$ language 'plpgsql' volatile;

      文章來源:腳本之家

      來源地址:https://www.jb51.net/article/204788.htm

      申請(qǐng)創(chuàng)業(yè)報(bào)道,分享創(chuàng)業(yè)好點(diǎn)子。點(diǎn)擊此處,共同探討創(chuàng)業(yè)新機(jī)遇!

      相關(guān)文章

      熱門排行

      信息推薦