计算经纬度的正方形边界

-- 当基站导入成功以后调用该存储过程:(注:在此存储过程调用之前,java程序会将用户导入的小区和场景关系拆分成多对多关系。分_line和_plane两个表)
-- 1、根据city_border配置表,更新基站表的cityid/PROV_ID
-- 2、更新bs_scene_plane_rel:更新场景名字为用户导入的名字,场景id为场景名字的md5值。
-- 3、更新bs_scene_line_rel:根据用户导入名字和系统配置的场景对照表,更新场景名字,场景id.
-- 4、更新小区border,并根据小区border 小区场景关系 计算出高校、住宅区、商业区等场景的边界

-- 更新小区border,并根据小区border 小区场景关系 计算出高校、住宅区、商业区等场景的边界
#Routine body goes here...
-- 1、根据基站的经纬度信息,更新基站边界
-- 2、根据基站和场景关系表,获取一个场景所有的基站边界,并生成场景的边界。

-- 以基站为中心点,边长为3公里的正方形的4个顶点。
SELECT scene_cell_length into @dis FROM cfg_cell_length LIMIT 1;
set @radius=6378137.0;
set @pi=3.1415926;
set @disLon=@dis*180/(@radius*@pi);
-- 更新基准纬度,根据纬度不同,计算纬度的正方形顶点时,需要加上一个基数
update bs_scene_rel_trans set baselat=log(tan((90+LATITUDE)*@pi/360)) where scenetype in(1,4,5);
-- 更新经纬度值
update bs_scene_rel_trans set lat1=atan(exp(baselat-@dis/@radius))*360/@pi-90,
lat2=atan(exp(baselat+@dis/@radius))*360/@pi-90,
lon1=LONGITUDE-@disLon,lon2=LONGITUDE+@disLon where scenetype in(1,4,5);
-- 更新border
update bs_scene_rel_trans set CELL_BORDER = concat('POLYGON((',LON1,' ',LAT1,', ',
LON2,' ',LAT1,', ',LON2,' ',LAT2,', ',LON1,' ',LAT2,', ',LON1,' ',LAT1,'))') where scenetype in(1,4,5);

原文地址:https://www.cnblogs.com/wanxqing/p/10956691.html