设为首页 收藏本站
查看: 1764|回复: 0

[经验分享] Oracle spatial、openlayers、geoserver开发地理信息系统总结

[复制链接]
YunVN网友  发表于 2016-8-15 06:53:11 |阅读模式
  转载请注明出处:tedeum.iyunv.com
  感谢开源,使用OpenLayers+Geoserver的地理信息系统开发很简单,完全可以套用开发MIS系统的经验,我这里总结为三个步骤:
  1、数据准备
  2、数据发布
  3、数据展现
  我将按照这个思路来介绍,首先是数据发布:
  一、数据发布
  GIS数据源是多种多样的,有矢量数据、有栅格数据、有文本数据库、有关系型数据库,由于我平时主要使用Oracle 空间数据库和PostGIS,Oracle用得多一些,所以我以Oracle为例来说明,其他的触类旁通,至少我遇到的大部分是这样的。
  使用Oracle管理空间数据完全可以当作是关系性数据库,这就是我是的可以套用MIS系统经验的原因,Oracle空间数据库增加了一个空间对象MDSYS.SDO_GEOMETRY来存储空间数据,就像varchar,int这些类型一样,但是这个类型是个对象。
  需要注意的是,这个空间对象要正确发布需要创建空间索引,而要创建空间索引则要现在元数据表中进行定义,下面我就空间图形中基础的点线面来示例如何创建空间数据库表:

--创建表
create table t_point
(
id       number,
name nvarchar2(256),
position  MDSYS.SDO_GEOMETRY
);
create table t_line
(
id       number,
name nvarchar2(256),
position  MDSYS.SDO_GEOMETRY
);
create table t_area
(
id       number,
name nvarchar2(256),
position  MDSYS.SDO_GEOMETRY
);
--创建空间索引
insert into user_sdo_geom_metadata(table_name,COLUMN_NAME, DIMINFO)
values(
'T_POINT',
'POSITION',
MDSYS.SDO_DIM_ARRAY(
MDSYS.SDO_DIM_ELEMENT('X',-180,180,0.005),
MDSYS.SDO_DIM_ELEMENT('Y',-90,90,0.005),
MDSYS.SDO_DIM_ELEMENT('Z',-9000,9000,0.005)
)
);
CREATE INDEX IDX_T_POINT_POS ON T_POINT(POSITION) INDEXTYPE IS MDSYS.SPATIAL_INDEX;
insert into user_sdo_geom_metadata(table_name,COLUMN_NAME, DIMINFO)
values(
'T_LINE',
'POSITION',
MDSYS.SDO_DIM_ARRAY(
MDSYS.SDO_DIM_ELEMENT('X',-180,180,0.005),
MDSYS.SDO_DIM_ELEMENT('Y',-90,90,0.005),
MDSYS.SDO_DIM_ELEMENT('Z',-9000,9000,0.005)
)
);
CREATE INDEX IDX_T_LINE_POS ON T_LINE(POSITION) INDEXTYPE IS MDSYS.SPATIAL_INDEX;
insert into user_sdo_geom_metadata(table_name, COLUMN_NAME, DIMINFO)
values(
'T_AREA',
'POSITION',
MDSYS.SDO_DIM_ARRAY(
MDSYS.SDO_DIM_ELEMENT('X',-180,180,0.005),
MDSYS.SDO_DIM_ELEMENT('Y',-90,90,0.005),
MDSYS.SDO_DIM_ELEMENT('Z',-9000,9000,0.005)
)
);
CREATE INDEX IDX_T_AREA_POS ON T_AREA(POSITION) INDEXTYPE IS MDSYS.SPATIAL_INDEX;

  现在可以看到,空间表创建好了,我们可以像操作普通关系数据库一样进行操作,下面用一个插入例子来说明:

--插入点
insert into t_point(id, name, position)
values
(1, 'test point',
MDSYS.SDO_GEOMETRY (3001,
NULL,
NULL,
MDSYS.sdo_elem_info_array (1, 1, 1, 4, 1, 0),
MDSYS.sdo_ordinate_array (24.886436,
102.784423,
0,
1,
0,
0
)
)
);
--插入线
insert into t_line(id, name, position)
values
(1, 'test line',MDSYS.SDO_GEOMETRY (3002,
NULL,
NULL,
MDSYS.sdo_elem_info_array (1, 2, 1),
MDSYS.sdo_ordinate_array (0, 0, 0, 0, 90, 0, 200, 90 , 0, 200, 0, 0)
));
--插入面
insert into t_area(id, name, position)
values
(1, 'test area',MDSYS.SDO_GEOMETRY (3003,
NULL,
NULL,
MDSYS.sdo_elem_info_array (1, 1003, 1),
MDSYS.sdo_ordinate_array (0, 0, 0, 0, 90, 0, 200, 90 , 0, 200, 0, 0, 0, 0, 0)
));
  上面的代码构造了一个空间对象,该对象的说明可以参考相关文档,这里就不详细说明了。准备好数据以后就可以进行数据发布了,数据发布是其中比较没有技术含量的体力活,可以参考这里的一系列文章:http://www.cnblogs.com/beniao/archive/2011/01/08/1930822.html
  数据发布好后,可以进行数据展示了,数据展示可以套用MIS的控件概念,按照如下步骤开展:
  1、创建地图控件
  2、创建图层
  3、在地图中加入图层
  4、在地图中加入其他控件
  详细如下代码所示:

//初始化地图
//var map = new OpenLayers.Map('map');
var map = new OpenLayers.Map({
div:"map",
maxExtent:[97.027587,21.166484,106.739502,29.31642],
center:new OpenLayers.LonLat(101.857909,24.726875)
});
//新建图层
var ol_wms = new OpenLayers.Layer.WMS(
"OpenLayers WMS",
"http://10.180.80.206:9000/geoserver/wms",
{layers: "sdgis:DQJ"}
);
//添加地图控件
map.addControl(new OpenLayers.Control.LayerSwitcher());
map.addControl(new OpenLayers.Control.MousePosition());
map.addControl(new OpenLayers.Control.Scale());
//图层加入地图
map.addLayers([ol_wms]);
map.zoomToExtent([97.027587, 21.166484, 106.739502, 27.467659], true);
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-257800-1-1.html 上篇帖子: Oracle几种查找和删除重复记录的方法总结 下篇帖子: [Oracle] Data Guard CPU/PSU补丁安装教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表