Oracle spatial、openlayers、geoserver开发地理信息系统总结

感谢开源,使用OpenLayers+Geoserver的地理信息系统开发很简单,完全可以套用开发MIS系统的经验,我这里总结为三个步骤:

1、数据准备

2、数据发布

3、数据展现

我将按照这个思路来介绍,首先是数据发布:

一、数据发布

GIS数据源是多种多样的,有矢量数据、有栅格数据、有文本数据库、有关系型数据库,由于我平时主要使用Oracle 空间数据库和PostGIS,Oracle用得多一些,所以我以Oracle为例来说明,其他的触类旁通,至少我遇到的大部分是这样的。

使用Oracle管理空间数据完全可以当作是关系性数据库,这就是我是的可以套用MIS系统经验的原因,Oracle空间数据库增加了一个空间对象MDSYS.SDO_GEOMETRY来存储空间数据,就像varchar,int这些类型一样,但是这个类型是个对象。

需要注意的是,这个空间对象要正确发布需要创建空间索引,而要创建空间索引则要现在元数据表中进行定义,下面我就空间图形中基础的点线面来示例如何创建空间数据库表:

Sql代码  

  1. --创建表
  2. create table t_point
  3. (
  4. id       number,
  5. name nvarchar2(256),
  6. position  MDSYS.SDO_GEOMETRY
  7. );
  8. create table t_line
  9. (
  10. id       number,
  11. name nvarchar2(256),
  12. position  MDSYS.SDO_GEOMETRY
  13. );
  14. create table t_area
  15. (
  16. id       number,
  17. name nvarchar2(256),
  18. position  MDSYS.SDO_GEOMETRY
  19. );
  20. --创建空间索引
  21. insert into user_sdo_geom_metadata(table_name,COLUMN_NAME, DIMINFO)
  22. values(
  23. ‘T_POINT‘,
  24. ‘POSITION‘,
  25. MDSYS.SDO_DIM_ARRAY(
  26. MDSYS.SDO_DIM_ELEMENT(‘X‘,-180,180,0.005),
  27. MDSYS.SDO_DIM_ELEMENT(‘Y‘,-90,90,0.005),
  28. MDSYS.SDO_DIM_ELEMENT(‘Z‘,-9000,9000,0.005)
  29. )
  30. );
  31. CREATE INDEX IDX_T_POINT_POS ON T_POINT(POSITION) INDEXTYPE IS MDSYS.SPATIAL_INDEX;
  32. insert into user_sdo_geom_metadata(table_name,COLUMN_NAME, DIMINFO)
  33. values(
  34. ‘T_LINE‘,
  35. ‘POSITION‘,
  36. MDSYS.SDO_DIM_ARRAY(
  37. MDSYS.SDO_DIM_ELEMENT(‘X‘,-180,180,0.005),
  38. MDSYS.SDO_DIM_ELEMENT(‘Y‘,-90,90,0.005),
  39. MDSYS.SDO_DIM_ELEMENT(‘Z‘,-9000,9000,0.005)
  40. )
  41. );
  42. CREATE INDEX IDX_T_LINE_POS ON T_LINE(POSITION) INDEXTYPE IS MDSYS.SPATIAL_INDEX;
  43. insert into user_sdo_geom_metadata(table_name, COLUMN_NAME, DIMINFO)
  44. values(
  45. ‘T_AREA‘,
  46. ‘POSITION‘,
  47. MDSYS.SDO_DIM_ARRAY(
  48. MDSYS.SDO_DIM_ELEMENT(‘X‘,-180,180,0.005),
  49. MDSYS.SDO_DIM_ELEMENT(‘Y‘,-90,90,0.005),
  50. MDSYS.SDO_DIM_ELEMENT(‘Z‘,-9000,9000,0.005)
  51. )
  52. );
  53. CREATE INDEX IDX_T_AREA_POS ON T_AREA(POSITION) INDEXTYPE IS MDSYS.SPATIAL_INDEX;

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

Sql代码  

  1. --插入点
  2. insert into t_point(id, name, position)
  3. values
  4. (1, ‘test point‘,
  5. MDSYS.SDO_GEOMETRY (3001,
  6. NULL,
  7. NULL,
  8. MDSYS.sdo_elem_info_array (1, 1, 1, 4, 1, 0),
  9. MDSYS.sdo_ordinate_array (24.886436,
  10. 102.784423,
  11. 0,
  12. 1,
  13. 0,
  14. 0
  15. )
  16. )
  17. );
  18. --插入线
  19. insert into t_line(id, name, position)
  20. values
  21. (1, ‘test line‘,MDSYS.SDO_GEOMETRY (3002,
  22. NULL,
  23. NULL,
  24. MDSYS.sdo_elem_info_array (1, 2, 1),
  25. MDSYS.sdo_ordinate_array (0, 0, 0, 0, 90, 0, 200, 90 , 0, 200, 0, 0)
  26. ));
  27. --插入面
  28. insert into t_area(id, name, position)
  29. values
  30. (1, ‘test area‘,MDSYS.SDO_GEOMETRY (3003,
  31. NULL,
  32. NULL,
  33. MDSYS.sdo_elem_info_array (1, 1003, 1),
  34. MDSYS.sdo_ordinate_array (0, 0, 0, 0, 90, 0, 200, 90 , 0, 200, 0, 0, 0, 0, 0)
  35. ));

上面的代码构造了一个空间对象,该对象的说明可以参考相关文档,这里就不详细说明了。准备好数据以后就可以进行数据发布了,数据发布是其中比较没有技术含量的体力活,可以参考这里的一系列文章:http://www.cnblogs.com/beniao/archive/2011/01/08/1930822.html

数据发布好后,可以进行数据展示了,数据展示可以套用MIS的控件概念,按照如下步骤开展:

1、创建地图控件

2、创建图层

3、在地图中加入图层

4、在地图中加入其他控件

详细如下代码所示:

Js代码  

  1. //初始化地图
  2. //var map = new OpenLayers.Map(‘map‘);
  3. var map = new OpenLayers.Map({
  4. div:"map",
  5. maxExtent:[97.027587,21.166484,106.739502,29.31642],
  6. center:new OpenLayers.LonLat(101.857909,24.726875)
  7. });
  8. //新建图层
  9. var ol_wms = new OpenLayers.Layer.WMS(
  10. "OpenLayers WMS",
  11. "http://10.180.80.206:9000/geoserver/wms",
  12. {layers: "sdgis:DQJ"}
  13. );
  14. //添加地图控件
  15. map.addControl(new OpenLayers.Control.LayerSwitcher());
  16. map.addControl(new OpenLayers.Control.MousePosition());
  17. map.addControl(new OpenLayers.Control.Scale());
  18. //图层加入地图
  19. map.addLayers([ol_wms]);
  20. map.zoomToExtent([97.027587, 21.166484, 106.739502, 27.467659], true);

原文地址:https://www.cnblogs.com/zhaoyanhaoBlog/p/9026389.html

时间: 2024-11-09 01:40:09

Oracle spatial、openlayers、geoserver开发地理信息系统总结的相关文章

用MapX与C#开发地理信息系统

转:http://www.cnblogs.com/dachie/archive/2010/08/17/1801598.html 第四章 MapX与C#实例... 5 4.1 MapX图层建立... 5 4.1.1 MapX数据与地图的组织结构... 5 4.1.2 实例1:建立/添加一个用户自定义图层... 5 4.1.3 在MapX中使用栅格图层... 7 4.1.4 实例2:栅格图层的建立... 8 4.2 图元自动标注... 9 4.2.1 实例3:给图层加上自动标注功能... 9 4.3

openlayers从开发环境到生产环境

原文出处:http://www.blogjava.net/siriusfx/archive/2013/03/07/327853.html Openlayers项目开发完成后,需要将系统从开发环境转移到生产环境. 开发环境下,Openlayers框架由上百个独立的javascript程序文件组成,通过lib目录中的Openlayers.js动态加载,便于各个功能模块的开发调试.Openlayers是一个非常庞大的Web地图客户端应用框架,提供了很多功能模块,通常在开发过程中不会用到全部模块. 将系

中科燕园GIS外包案例之11---机场工程地理信息系统EGIS

对于大型机场建设工程,无论工程建设过程中,还是工程建设完成后,进入运行和维护阶段,必定要产生和使用到大量的各式各样的信息资料,包括工程项目过程管理控制类文档,工程图档,电子表格,工程技术性文档,各种图像,视频信息等.这些工程建设相关的信息资料,被称为“工程内容”,其特点是数据量特大,数据格式种类多. 因此,对工程全过程生成的大量的工程内容(涉及项目过程控制控制,勘测,规划,设计,实施,竣工各个阶段相关的管理类与技术类信息资料)进行科学管理,使之能够进行归档储存,数据检索,应用开发,工程技术性利用

Openlayers+Geoserver(一):项目介绍以及地图加载

项目验收完,趁着事情不是很多,对这个项目进行梳理.我主要负责地图模块,网站其他模块主要有两个,一个是报表,主要是100多张报表,技术没有难度,主要是工作量的问题.另一个是数据的校验,就是校验数据的冲突. 现在主要介绍地图,地图主要使用openlayers+geoserver,通过Geoserver加载路线以及点状物的shape数据,将各个图层形成一个图层组,页面前端用openlayers加载该图层组,然后对此图层组进行查询.这样做的好处就是,如果有新的图层增加,如果没有特殊的需求,是不需要修改代

中科燕园GIS外包----机场工程地理信息系统EGIS

对于大型机场建设工程,无论工程建设过程中,还是工程建设完成后,进入运行和维护阶段,必定要产生和使用到大量的各式各样的信息资料,包括工程项目过程管理控制类文档,工程图档,电子表格,工程技术性文档,各种图像,视频信息等.这些工程建设相关的信息资料,被称为"工程内容",其特点是数据量特大,数据格式种类多. 因此,对工程全过程生成的大量的工程内容(涉及项目过程控制控制,勘测,规划,设计,实施,竣工各个阶段相关的管理类与技术类信息资料)进行科学管理,使之能够进行归档储存,数据检索,应用开发,工程

Oracle spatial与arcsde 的关系

有一些同事问过我下面这些问题: 我们用了oracle spatial sdo_geometry,是不是没用arcsde? 我们到底是使用oracle spatial还是arcsde,有点懵! 执行了create enterprise geodatabase是不是就表示使用了arcsde?那这个动作到底是做什么呢? 我们没用arcsde的服务,为什么你还说我们用了arcsde呢? …… 因为问得人很多,我打算将我的理解写下来,与大家交流,以收抛砖引玉之效. 1.什么是ARCSDE SDE的全称是s

C#读取Oracle Spatial的sdo_geometry

oracle的sdo_geometry中内置get_wkt和get_wkb两个方法. 以数据库表geoms为例,此表中有id和geometry两列 try { OracleConnection con = new OracleConnection(conStr); OracleCommand cmd = new OracleCommand(@"SELECT sdo_geometry.get_wkt(geometry) FROM geoms WHERE id= 1902 ", con);

在Oracle Spatial中增加Web Mercator投影坐标系

参考资料: 1. 最重要的参考文章,基本上就是按这个做的!!!:https://www.inf.unibz.it/dis/wiki/doku.php?id=students:minnerebner:oracle:addingsrid . 2. 实例参考:http://www.cnblogs.com/cleverxy/archive/2012/04/28/2474563.html 步骤1是从0开始,这个应该有一些基础了,可以对照看一下里面对8801~8807.9802~9807的解释,然后再去数据

Oracle Spatial中SDO_Geometry详细说明[转]

在ArcGIS中通过SDE存储空间数据到Oracle中有多种存储方式,分别有:二进制Long Raw .ESRI的ST_Geometry以及基于Oracle Spatial的SDO_Geometry等等. <UpDooGIS原创> 关于这几种方式的各自的优缺点不是主要的探讨的方向,这些我们可以通过ArcGIS中的ArcGIS Server Help得到相关的帮助.这里主要是学习关于基于Oracle Spatial的存储方式,通过这种存储方式几何列Shape的字段类型为mdsys.sde_geo