Oracle spatial、openlayers、geoserver开发地理信息系统总结
感谢开源,使用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);
Oracle spatial、openlayers、geoserver开发地理信息系统总结的更多相关文章
- 用MapX与C#开发地理信息系统
转:http://www.cnblogs.com/dachie/archive/2010/08/17/1801598.html 第四章 MapX与C#实例... 5 4.1 MapX图层建立... 5 ...
- Oracle Spatial GIS相关研究
1.Oracle Spatial 概念相关 Oracle Spatial 是Oracle 数据库强大的核心特性,包含了用于存储矢量数据类型.栅格数据类型和持续拓扑数据类型的原生数据类型.Oracle ...
- Openlayers+Geoserver(一):项目介绍以及地图加载
项目验收完,趁着事情不是很多,对这个项目进行梳理.我主要负责地图模块,网站其他模块主要有两个,一个是报表,主要是100多张报表,技术没有难度,主要是工作量的问题.另一个是数据的校验,就是 ...
- Oracle Spatial中SDO_Geometry详细说明[转]
在ArcGIS中通过SDE存储空间数据到Oracle中有多种存储方式,分别有:二进制Long Raw .ESRI的ST_Geometry以及基于Oracle Spatial的SDO_Geometry等 ...
- 中科燕园GIS外包----机场project地理信息系统EGIS
对于大型机场建设project,不管project建设过程中.还是project建设完毕后.进入执行和维护阶段.必然要产生和使用到大量的各式各样的信息资料,包含project项目过程管理控制类文档,p ...
- 地理信息系统公开课计划 前言I
对,就是地理信息系统(GIS),不是遥感RS,也不是编程,纯粹的地理信息系统. 地理信息系统=数学+物理+计算机+地理的烧脑组合. 但凡能知道.了解地理信息系统的人,基本上都不会是非知识分子,我就不矫 ...
- Oracle Spatial中SDO_Geometry说明
Oracle Spatial中SDO_Geometry说明 在ArcGIS中通过SDE存储空间数据到Oracle中有多种存储方式,分别有:二进制Long Raw .ESRI的ST_Geometry以及 ...
- C#读取Oracle Spatial的sdo_geometry
oracle的sdo_geometry中内置get_wkt和get_wkb两个方法. 以数据库表geoms为例,此表中有id和geometry两列 try { OracleConnection con ...
- Oracle spatial与arcsde 的关系
有一些同事问过我下面这些问题: 我们用了oracle spatial sdo_geometry,是不是没用arcsde? 我们到底是使用oracle spatial还是arcsde,有点懵! 执行了c ...
随机推荐
- js多个异步请求
一,两个(或多个)js异步并发执行,怎么在两个AJax异步操作之后执行一个新的操作 原题来自 ES6 方法 1.Promise 包装异步ajax操作,2.定义async 函数,3.用await等待pr ...
- 如何用nginx在本地把9000端口转发到80端口上
起因看到一个用java写的轻博客,于是就兴致冲冲的试用一下.由于是lnmp的环境,Nginx占用了80端口,新博客只能用其他的端口,这里选择了9000端口,本地测试没问题.总不能访问了域名然后在加上端 ...
- python02
# 字符串学习第二天 # 1.练习len与range for的使用 test=input("请输入") l=len(test) for i in range(0,l): print ...
- linux下can调试工具canutils安装过程记录
https://www.cnblogs.com/chenfulin5/p/6797756.html 一.下载源码 下载canutils和libsocketcan libsocketcan地址:http ...
- Prometheus监控学习笔记之初识PromQL
0x00 概述 Prometheus 提供了一种功能表达式语言 PromQL,允许用户实时选择和汇聚时间序列数据.表达式的结果可以在浏览器中显示为图形,也可以显示为表格数据,或者由外部系统通过 HTT ...
- ElasticSearch vs Solr多维度分析对比
福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号: 大数据躺过的坑 Java从入门到架构师 人工智能躺过的坑 Java全栈大联盟 ...
- SQL语句的优化方法
减少对数据库的查询次数 尽量使用相同的或非常类似的SQL语句进行查询 避免不带任何条件的SQL语句的执行 sql语句用大写 别名的使用(1.5倍)
- 第五章 CSS常用属性笔记
1. span标签 突显,强调局部文字的作用. 2.字体样式 font-size: 字体大小 font-style:normal,italic(倾斜) font-weight:normal,bold( ...
- Android图片裁剪解决方案 -- 从相册截图
在看Storage Access Framework,里面有一个加载相册图片的程序片断,可能是系统版本的问题,无法返回结果,这里找到一个适用于旧版本的方法. 在Android开发中,可以轻松调用一个I ...
- ListView与SimpleAdapter(三)
一般用于只有两个控件的列表. 使用SimpleAdapter 的数据是以List<Map<String,?>>形式封装数据, List的每一节对应ListView的每一行. H ...