昨天在网上搜了一些城市的经纬度非完整资料,想把他们添加到oracle中,折腾了半天终于完成了。无奈下班时把 pl/sql developer 关掉时没保存sql 代码。那个郁闷啊......今天就不重写昨天的内容了。
简要的阐述一下过程吧:
1 导入数据
网上搜到的资料就是一个普通的文本,想要弄到数据库中,要么通过一条一条对应手工录入,要么通过什么导入吧,比如excel 什么的。结果还真有方法 把文本copy 到excel 中数据成了一行一行的"结构化数据"了,然后把表打开成编辑状态点击相应表头,这样就选择了这一整列,然后粘贴,搞定。
2 调整数据
copy 进来的数据因为城市顺序与数据库中的城市顺序不一致所以还的调整。 数据格式形如形如 "牡丹江 129.34 44.35";
思路很简单 如果名字相配则切割字符串后update.
写一个测试sql , 列des中正是保存 copy 进去的数据。
update (select m.cityid ,m.des from s_city m join s_city s on m.cityname = substr( s.des,1, instr(s.des,' ',1)-1)|| '市')
t set t.des = t.des;
执行错误,错误信息"无法保存非键值保存表对应的列"。添加主键后还是错误,并且 select 出来的结果集也没有重复数据。无语了,不知道什么原因。
通过一条语句实现有障碍,就两条吧经度纬度分别update。最终搞定。
今天的内容:
获得弧度的函数。
CREATE OR REPLACE FUNCTION RAD(d number) RETURN NUMBER
is
PI number :=3.141592625;
begin
return d* PI/180.0;
end ;
select RAD(360) from dual;
根据经纬度计算距离。
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;
--根据城市名计算距离
CREATE OR REPLACE FUNCTION GetDisByCityName(str1 varchar2, str2 varchar2)
return number is
lat1 number := 0;
lng1 number := 0;
lat2 number := 0;
lng2 number := 0;
begin
select longitude into lat1 from s_city where cityname=str1 ;
select dimensionality into lng1 from s_city where cityname=str1;
select longitude into lat2 from s_city where cityname=str2;
select dimensionality into lng2 from s_city where cityname=str2;
return GetDistance(lat1 ,lng1 ,lat2 , lng2 );
end;
--select GetDisByCityName('长沙市','南昌市')from dual;
结果 258.6275
分享到:
相关推荐
### 经纬度计算距离 在地理信息系统(GIS)领域,计算两个地理位置之间的距离是一项基本且重要的任务。本文档提供了一种使用SQL编程语言在Oracle数据库中实现经纬度距离计算的方法。具体而言,文档中提供了两个函数...
在IT行业中,SQL(Structured Query Language)是一种用于管理和处理关系数据库的...在"根据经纬度计算附件的人.txt"这个文件中,很可能包含了更具体的示例代码或教程,可以帮助你深入理解这些概念并应用于实际项目。
oracle-sql脚本,省份城市经纬度sql脚本,亲测,可用,主要包含全国各个省份和城市的经纬度
通过入参 生日 ,计算日期(默认sysdate),计算年龄 精确到秒
2. 空间操作:包括距离计算、缓冲区分析、几何对象的相交、覆盖等。 3. 地图服务:支持WMS(Web Map Service)和WFS(Web Feature Service)标准,可以发布地图和地理数据服务。 4. 地理编码:将地址转换为经纬度...
4. 许可计算工具和资源:Oracle提供了多种工具来帮助用户进行许可计算,例如Oracle License and Service Contract Management Tool(OLSM),以及VMware官方提供的工具和建议。 5. 与Oracle的沟通:在不确定如何...
在oracle中利用函数实现计算公式解析|在oracle中利用函数实现计算公式解析
oracle根据生日自动求年龄的函数源代码,无须创建任何其他表
oracle语句查询两个日期之间星期六、星期日的天数
通过上述介绍,我们可以了解到在Oracle数据库中,根据不同的需求可以选择使用“WW”或“IW”的周数计算方法。这两种方法各有其适用场景,选择合适的方法可以更准确地完成日期相关的数据处理任务。在具体实现过程中,...
* 在 Oracle 数据库中,我们可以根据考核规则来计算学生的成绩。例如,根据测试成绩、考勤和作业完成率来计算总成绩。 8. 数据库开发培训 * Oracle 数据库开发培训是指使用 Oracle 数据库来开发应用程序的培训。...
Oracle 直方图计算公式,对于Oracle cbo优化器的探究又进入一步
在echarts2的地图展示中,国内的地级市不全,现在整理了全国所有地级市的坐标值,并导出Oracle的sql数据库导入格式,方便大家使用。
在使用 OLEDB 连接 Oracle 数据库时,需要安装 Oracle 数据访问组件 (ODAC--Oracle Data Access Components),其中包括 Oracle Provider for OLEDB。这是因为 OraOLEDB.Oracle 提供程序是 Oracle 的一部分,需要单独...
在实际工作中经常遇到截取两个相同字符串之间的字符的oracle问题,以下是相关语句
Oracle 查询两个日期之间的所有月份
"SYBASE iq与ORACLE使用分析函数计算同期值及常用计算函数使用" 本资源摘要信息主要介绍了SYBASE iq和ORACLE中使用分析函数计算同期值和常用计算函数的使用方法。文章涵盖了同期值的计算、累计及同期累计值的计算、...
本人编写,通过自己定义的函数计算两个日期之间周末的天数和工作日天数,经过测试,非常好用
GCJ经纬度(腾讯、高德)转WGS84经纬度EXCEL算法,亲自用过好用!
通过使用oracle 的空间函数,来计算出用户点和和设备(线对象或点对象)之间的距离。已写为存储过程,参数:一个点坐标,一个设备表名,一个设备id