最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

postgresql 計(jì)算距離的實(shí)例(單位直接生成米)

 更新時(shí)間:2021年01月26日 10:18:26   作者:duanmuxiao  
這篇文章主要介紹了postgresql 計(jì)算距離的實(shí)例(單位直接生成米),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

之前用的是ST_Distance 函數(shù),但是貌似需要進(jìn)行一次單位的轉(zhuǎn)換,而且網(wǎng)上有說(shuō)那種轉(zhuǎn)換不是特別準(zhǔn)確,現(xiàn)在暫時(shí)將該算法記錄在此:

select st_distance(ST_GeomFromText('POINT(120.451737 36.520975)',900913),ST_GeomFromText('POINT(120.455636 36.520885)',900913))*60*1.852;

這里的計(jì)算方式倒是可以換坐標(biāo)系,但是,測(cè)試了兩個(gè)坐標(biāo)系都沒(méi)有起作用。而且該種方式轉(zhuǎn)換過(guò)單位后跟arcgis計(jì)算出的結(jié)果相差甚遠(yuǎn),最終決定使用下面的方式;

今天發(fā)現(xiàn)了另外一種方式來(lái)計(jì)算距離,這種方式可以直接生成單位為米的結(jié)果:

select ST_Length(Geography(ST_GeomFromText('LINESTRING(120.451737 36.520975,120.455636 36.520885)')));

這種方式的不便在于:

1.要把點(diǎn)轉(zhuǎn)換成線(xiàn)或者其他的圖形而不是點(diǎn);

2.geography函數(shù)現(xiàn)在只支持4326坐標(biāo)系,不能換成其他的。

追加:

上面的方式是計(jì)算點(diǎn)到點(diǎn)的距離,但是如果要想知道某一個(gè)點(diǎn)到某條線(xiàn)的距離是不是在某個(gè)范圍內(nèi),又該如何計(jì)算呢;如下:

select ST_Contains(St_Astext(ST_Buffer(geography(geomfromtext('MULTILINESTRING((線(xiàn)的坐標(biāo)點(diǎn)))')),25.00{以米為單位的距離})),st_astext(geography(geomfromtext('POINT(121.37805 37.54142)')))) as result

使用類(lèi)似上面的方式,就可以輸入以米為單位的距離判斷某個(gè)點(diǎn)是否在某個(gè)距離范圍內(nèi);

補(bǔ)充:postgresql 搜索指定距離內(nèi)的記錄 按近到遠(yuǎn)排序 并返回距離

實(shí)例如下:

CREATE TABLE mylocation ( 
 id SERIAL PRIMARY KEY,
 geom GEOMETRY(Point, 4326),
 name VARCHAR(128),
 x double precision,
 y double precision
); 
 
INSERT INTO mylocation (geom,name,x,y) VALUES (
 ST_GeomFromText('POINT(0.0001 0)', 4326),'zhangsan',0.0001,0
);
INSERT INTO mylocation (geom,name,x,y) VALUES (
 ST_GeomFromText('POINT(0.001 0)', 4326),'zhangsan',0.001,0
);
INSERT INTO mylocation (geom,name,x,y) VALUES (
 ST_GeomFromText('POINT(0.001 0)', 4326),'zhangsan',0.001,0
);
INSERT INTO mylocation (geom,name,x,y) VALUES (
 ST_GeomFromText('POINT(0.1 0)', 4326),'zhangsan',0.1,0
); 
 
SELECT id, name,geom,x,y,  ST_DistanceSphere(
           geom,
           ST_GeometryFromText('POINT(0 0)')) distance
FROM mylocation
WHERE ST_DWithin(
 geom, 
 ST_GeomFromText('POINT(0 0)', 4326),
 0.001
)ORDER BY distance asc;;

查詢(xún)語(yǔ)句 下面距離單位為m

SELECT id, name,geom,x,y,  ST_DistanceSphere(
           geom,
           ST_GeometryFromText('POINT(0 0)')) distance
FROM mylocation
WHERE ST_DWithin(
 geom::geography, 
 ST_GeomFromText('POINT(0 0)', 4326)::geography,
 1000
) ORDER BY distance asc;

搜索結(jié)果

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

最新評(píng)論

宁城县| 新竹市| 香河县| 玉龙| 房产| 迁西县| 沂南县| 永泰县| 商都县| 嘉黎县| 许昌县| 三江| 葫芦岛市| 花莲县| 长垣县| 勃利县| 江都市| 赣州市| 汽车| 黑河市| 都安| 寿阳县| 黄大仙区| 临泉县| 尚志市| 离岛区| 金沙县| 曲阳县| 青浦区| 哈尔滨市| 汝阳县| 太白县| 乌苏市| 双鸭山市| 景德镇市| 阜阳市| 凭祥市| 塔城市| 遂昌县| 徐闻县| 三明市|