oracle spatial(一)开端
如今的互联网时代,貌似人和人之间,商业活动之间的交流受地理位置的限制越来越小.但实质上,互联网使数字世界和地理世界联系的越来越紧密.跟踪业务的组成部分和分析它们已成为更为重要的事情.地理空间位置信息是商业数据中固有的一部分,例如:客户地址清单,仓库进出的货物,商品的制造地,包装,仓储,运送的网络,等等.
空间数据的来源:文本地址清单,经纬度,政府或商业公司采集等等.空间数据的操作包括:空间数据的存储.矢量空间数据的分析.网络数据的分析.
用于空间信息管理的软件传统上被称为地理信息系统软件(GIS).这些系统是存储,分析,处理和显示空间数据的专用应用.如今应用最广泛在土地规划,地理营销,物流,网络运输等.随着GIS的发展,一些问题暴露出来:传统GIS使用双架构,即常规数据和空间数据只能分开存储,因为主流关系数据库无法有效的处理空间数据.这导致空间数据专有格式泛滥,GIS从主流的IT中分离等.
oracle spatial在改变这种局面中扮演者一个重要角色.它的优点:
1.无需双架构,空间数据和常规数据可以实现统一存储
2.使用sql,取消了对处理空间数据特定语言的需要
3.它定义了SDO_GEOMETRY数据类型,基本符合OGC和SQL/MM标准
oracle spatial的应用
你的oracle数据库,绝大多数数据分为以下两大类表,应用专用表:如产品和客户信息表,这些表可能并不包含显示的空间信息,但是可能以隐式的形式存在空间数据,如客户的地址.地理表:如街道网络,城市边界.
使用oracle spatial,如何为你的现有表中添加位置信息?
假如你有一个customers的表.
1. 需要向该表中添加一列:alter table customers add(location SDO_GEOMETRY)
2. 填充该列.这就需要对customers表中的客户地址进行地理编码.地理编码 就是oracle spatial使用特定的函数将street_number,street_name,city,postcode等文本数据转换为一个经纬度坐标:
upate customers set location = SDO_GCDR.GECODE_AS_GEOMETRY
(
'spatial',
SDO_KEYWORDARRAY
(
street_number|| ' ' || street_name, city|| ',' ||state|| ' ' || postcode
),
'us'
);
也可以直接填充该列:
upate customers set location=SDO_GEOMETRY
(
2001, -- 二维点
8307, -- oracle spatial内置的坐标系的ID
SDO_POINT_TYPE(-77.06,38.94,NULL), -- 点
NULL,
NULL
)
where id=1
这样,位置信息添加完毕,我们可以分析客户的主要分布区域,该区域竞争者的分布等等.
如何创建地理数据表?
数据一般来自供应商和国家制图部门.
create table streets (id number, name varchar2(35), city varchar2(32). geom SDO_GEOMETRY);