`

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

阅读更多

转载请注明出处:tedeum.iteye.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
3
分享到:
评论
1 楼 奥尼尔 2016-01-30  
请教一下博主,Geoserver的相关开发资料从哪找得到,官方的英文文档好像也没怎么提到啊。

相关推荐

    openLayers geoserver常见问题

    Oracle Spatial的连接涉及Geoserver的JDBC数据源配置。 GeoServer架构包括数据存储、WMS/WFS服务、SLD样式管理等组件。 发布地图无法显示,检查网络请求、服务配置、数据格式是否正确。 WebGIS的OpenGIS规范如WMS...

    GeoServer定制开发

    ### GeoServer定制开发详解 ...通过GeoServer与OpenLayers等工具的集成,开发者可以构建出高度个性化的地理信息系统应用。无论是对于专业GIS开发者还是初学者来说,GeoServer都是一个值得深入探索的强大工具。

    GeoServer 和GeoWebCache

    关于GeoServer地图缓存问题的研究.doc 基于GeoServer的WebGIS开发.pdf 基于GeoServer和OpenLayers的WebGIS实现.pdf 基于GOESERVER_2.0.2的地图发布(webgis作业).do ...Oracle_Spatial_与geoserver,_Google_Earth_集

    GeoServer地图开发解决方案

    GeoServer是一个开源的地理信息系统(GIS)服务器,遵循Open Geospatial Consortium (OGC)标准,提供了丰富的地图服务,包括WMS(Web Map Service)、WFS(Web Feature Service)、WCS(Web Coverage Service)等。...

    geoserver-2.12.0-bin.zip

    1. 数据发布:GeoServer支持多种常见的地理空间数据格式,如ESRI Shapefile、Geodatabase、PostGIS、Oracle Spatial等。你可以将这些数据源配置在GeoServer中,并通过OGC(Open Geospatial Consortium)标准,如WMS...

    gis系统开发与设计基本课程

    - 数据库管理系统(如PostGIS、Oracle Spatial)用于存储地理空间数据。 - 编程语言(如Python、Java)用于编写GIS应用逻辑。 - GIS服务器(如ArcGIS Server、GeoServer)提供地图服务和数据共享。 - 客户端框架...

    webgis面试题开源gis

    - **Oracle Spatial and Graph**:Oracle数据库的空间扩展模块,提供高级的空间数据管理功能,如空间索引、拓扑数据模型等。 - **Spatialite**:一个轻量级的空间数据库引擎,集成在SQLite中,适合移动设备或小型...

    WebGIS原理与应用开发源代码

    WebGIS,全称为Web地理信息系统,是将地理信息与Web技术相结合的一种信息技术,它使得地理数据可以通过互联网进行访问、查询、分析和展示。本资源"WebGIS原理与应用开发源代码"是基于《WebGIS原理与应用开发》这本...

    GIS软件二次开发课件

    GIS(Geographic Information System,地理信息系统)是一种集成了计算机硬件、软件和地理数据的系统,用于获取、存储、管理、分析和展示所有类型地理信息。GIS的二次开发是指基于现有的GIS平台,通过编程语言和API...

    java8集合源码-CheatSheet:是一个编写开发相关文档和示例代码的项目,了解有用。

    地理信息系统 开放层 地理服务器 Openlayers + Geoserver + Oracle Spatial Geoserver 样式层描述符 (SLD) 示例 地理服务器配置 Oracle空间 :pushpin: Java 注解 :pushpin: 算法 :pushpin: 安装和设置指南 :pushpin:...

    c++用于GIS二次开发

    在GIS(地理信息系统)领域,二次开发是指基于现有的GIS软件平台进行定制化开发,以满足特定用户或行业的功能需求。C++是一种强大的编程语言,常被用于GIS的底层开发,因为它提供了高性能和灵活的内存管理。以下是...

    MapServer.Open.Source.GIS.Development.Aug.2005

    它采用C语言编写,可以与各种数据库系统集成,包括PostgreSQL/PostGIS、MySQL、Oracle Spatial等,这使得MapServer成为一种高度灵活且强大的GIS工具。 #### 三、书籍主要内容 1. **基础知识**:书中首先介绍了GIS...

    webgis.rar_GIS web_Welcome!_gis_web gis_webgis

    3. **数据库**:存储地理数据,如PostGIS、Spatialite、Oracle Spatial等。 4. **客户端技术**:用于展示地图和交互,如JavaScript库(OpenLayers、Leaflet)、WebGL(Three.js、Cesium)或者浏览器插件(Flash、...

Global site tag (gtag.js) - Google Analytics