真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

oracle存儲(chǔ)過(guò)程---獲取數(shù)據(jù)庫(kù)中到指定經(jīng)緯度距離的坐標(biāo)

新項(xiàng)目需求:

堅(jiān)守“ 做人真誠(chéng) · 做事靠譜 · 口碑至上 · 高效敬業(yè) ”的價(jià)值觀,專業(yè)網(wǎng)站建設(shè)服務(wù)10余年為成都公路鉆孔機(jī)小微創(chuàng)業(yè)公司專業(yè)提供企業(yè)網(wǎng)站制作營(yíng)銷(xiāo)網(wǎng)站建設(shè)商城網(wǎng)站建設(shè)手機(jī)網(wǎng)站建設(shè)小程序網(wǎng)站建設(shè)網(wǎng)站改版,從內(nèi)容策劃、視覺(jué)設(shè)計(jì)、底層架構(gòu)、網(wǎng)頁(yè)布局、功能開(kāi)發(fā)迭代于一體的高端網(wǎng)站建設(shè)服務(wù)。

    結(jié)合百度地圖,在地圖中指定一個(gè)地點(diǎn),獲取此地點(diǎn)周?chē)?km范圍內(nèi)所有數(shù)據(jù)庫(kù)中存的單位的地點(diǎn)和信息標(biāo)記在地圖上。于是初寫(xiě)了一把oracle的存儲(chǔ)過(guò)程,純靠摸索寫(xiě)的。

后臺(tái)需要的函數(shù)如下:

首先,計(jì)算圓弧函數(shù)

CREATE OR REPLACE FUNCTION RAD(d number) RETURN NUMBER
is
PI number :=3.141592625;

begin
return  d* PI/180.0;
end ;

然后,計(jì)算距離函數(shù)

CREATE OR REPLACE FUNCTION GetDistance(lat1 number,
                                       lng1 number,
                                       lat2 number,
                                       lng2 number) RETURN NUMBER is
  earth_padius number := 6378.137;
  radLat1      number := rad(lat1);
  radLat2      number := rad(lat2);
  a            number := radLat1 - radLat2;
  b            number := rad(lng1) - rad(lng2);
  s            number := 0;
begin
  s := 2 *
       Asin(Sqrt(power(sin(a / 2), 2) +
                 cos(radLat1) * cos(radLat2) * power(sin(b / 2), 2)));
  s := s * earth_padius;
  s := Round(s * 10000) / 10000;
  return s;

end;

接下來(lái)是我自己寫(xiě)的存儲(chǔ)過(guò)程:

CREATE OR REPLACE PROCEDURE distance_maintunit(p_cur out sys_refcursor, center_lat in number , center_lng in number)
IS
v_muids VARCHAR(200);
v_distance NUMERIC(9,6);
BEGIN

  FOR L_RECORD IN (select * from M_MAINTENACEUNIT)
LOOP
    SELECT GetDistance(L_RECORD.Lat,L_RECORD.Longitude,center_lat,center_lng) INTO v_distance FROM dual;
    /*dbms_output.put_line('distance:' || v_distance);*/
    IF (v_distance <=1)
      THEN
        v_muids:= v_muids || L_RECORD.muid || ','; 
    END IF;
END LOOP;
    v_muids:= v_muids || '-1';
    
    dbms_output.put_line(v_muids);
    
    open p_cur for 'select * from m_maintenaceunit where muid in ('||v_muids||')';

EXCEPTION
   WHEN OTHERS THEN
       ROLLBACK;
    dbms_output.put_line(SQLERRM);

END;

由于使用mybatis,所以service調(diào)用如下:

	@Override
	public List getMaitunitByProcedures(Double lat, Double lng) {
		
		Map map=new HashMap();
		
		map.put("lng", lng);
		map.put("lat", lat);
		
		try {
			geoDao.getMaitunitByProcedures(map);
		}catch(UncategorizedSQLException e) {
//			System.out.println(e);
			e.printStackTrace();
		}
		
		@SuppressWarnings("unchecked")
		List siteList=(List)map.get("maintunits");
		return siteList;
		
	}

這里跟我之前轉(zhuǎn)載的那篇關(guān)于oracle存儲(chǔ)過(guò)程的文章有關(guān)聯(lián)(如何調(diào)用一個(gè)返回集合的存儲(chǔ)過(guò)程)

mapper.xml中的調(diào)用:


	 

	

dao中調(diào)用:

public List getMaintUnitList(@Param("lng") Double lng, @Param("lat") Double lat);

由于第一次寫(xiě)oracle存儲(chǔ)過(guò)程,代碼只是實(shí)現(xiàn)了功能,有待改進(jìn)。

參考:http://www.storyday.com/wp-content/uploads/2008/09/latlung_dis.html

http://blog.csdn.net/iw1210/article/details/9164573

http://www.cnblogs.com/microsoft-jiang/archive/2008/07/24/1250644.html


新聞名稱:oracle存儲(chǔ)過(guò)程---獲取數(shù)據(jù)庫(kù)中到指定經(jīng)緯度距離的坐標(biāo)
標(biāo)題網(wǎng)址:http://weahome.cn/article/pjejpg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部