(用于地球科学成图及处理的软件)
Geosoft公司的Oasis montaj是功能强大的用于地球科学调查和勘探的成图及处理软件.
Oasis montaj软件对大量的地球物理,地球化学和地质数据进行综合,视图和比较.它能够对数据进行快速分析,以帮助用户及时解决问题并做出决定.
Geosoft montaj 扩展模块有地球物理和地球化学分析,三维钻孔成图,重力和磁力滤波,水平校准,解释和其它功能.
另外,由Geosoft公司的技术合作伙伴开发的montaj+扩展模块,采用Oasis montaj平台在montaj环境下提供专业的重力和磁力数据处理和正演.
使用montaj,地球科学家可以在一个完整的环境下有效地输入,观看,处理和分享地球科学数据,对数据进行网格化和成像. Oasis montaj软件包包括丰富的内置数据输入,处理,可视化,成像及一体化.它代表了Geosoft完整的基本和高级的网格应用和成图功能.
一系列的montaj扩展功能可以对地球物理和地球化学数据进行处理,分析及质量控制,使Oasis montaj成为世界上功能最强大,最完善的地球科学成图和处理系统.
高性能的数据库
Oasis montaj的高性能数据库可以储存非常大的数据,进入数据库可以看到表格窗和完整剖面显示窗口.数据库可以在每一个项目周期的每一阶段中采集,保存,处理和分析大量数据,将其可视化,并与其它数据和信息整合在一起.
快速的数据处理
montaj的处理功能可以让用户对数据进行各种滤波和处理.它可以实时地对数据进行快速评估和实验.用户可以很容易地合并数据,并能打开多个剖面窗口进行比较.它可以处理许多数据点或处理单点数据. Geosoft的高级投影功能可以提供空中投影,并能处理超过2000个基准面和投影.
动态链接
Oasis montaj提供各种手段动态交换数据,评估结果,将数值插入到任务周期中.采用montaj软件,地球科学家可以交互式编辑图像,将图像进行动态链接,对追踪的图像进行处理,所有这些都在一个图像环境中完成.对Oasis montaj中多个图形,图像,剖面,数据进行动态链接,可以对视图中的共同特性及感兴趣的区域提供快速参考.
高级网格成图能力
Oasis montaj的网格算子能够快速,高效,最佳地处理大体积的地质科学数据.
软件的高级网格能力使用户能内插数据,并用以下网格程序产生网格:最小曲率,双向,趋势化,梯度,平滑和克里格法.各种网格处理工具和高级网格应用工具可以增强和操纵网格.
产生专业化图像
Oasis montaj的丰富的绘图能力使用户能快速方便地创建多个不同类型的图像,包括网格图像,表面图像,柱状图和地下位置图像.软件提供动态地貌的全部特性,如梯度特性和扩展标记来对专业化质量解释结果进行控制.
三维视图
Oasis montaj软件提供各种三维视图选项.用户可以显示多个表面,每一个有自己的地貌和容积,每一个有在三维空间中有自己的朝向.
用户可以在地形表面或数字立面图模型(DEM)网格中褶陷彩色网格或图形文件.三维技术也可以使你显示任何GEOSOFT的图集,它可以包含地形表面网格中的许多图像,符号和解释特性.
与GIS和其它专业化应用软件分享数据
各种插件和数据转换选项可将montaj成图软件和GIS及专业化的正演软件联系起来.软件插件也可用于ER Mapper 和Mapinfo软件.
自由使用的Oasis montaj Viewer软件提供各种网格格式转换,可与GIS和专业化的应用软件兼容,包括矿山正演和环境软件.
Oasis montaj也包括Geosoft DAP客户,使用户能直接从DAP服务器在局域网或互连网上搜索和检索地质科学数据集,图形和其它图形数据.
Montaj软件的用途:
·航空,海洋和地面重力及磁力探测数据处理,分析及质量控制
·矿产勘探及评估
·油,气储量勘探
·未爆炸物(UXO)探测
·地下地质和水文地质特性
·环境特性
·考古调查
·海洋学
Oasis montaj软件的特点和优点:
·容易创建,输入和输出: 图像,数据库,网格和点数据剖面
·Project Explorer用于浏览和追踪任务项目,包括数据库,网格和图像
·扩展数据处理/计算能力
·扩展图像编辑工具,包括CAD工具将解释结果绘到图像中
·支持超过2000个投影/基准面
·支持绘制自动程序任务
·E(电子)许可管理选项,包括许可浏览,升级,存放及两台电脑间传输
·Project Explorer工具包括3D,编辑条和图像组编辑去除/恢复功能
·数据存取工具可看数据文件特性
·创建GX来支持用户的想法和工作流程
·短切除/热键
数据特性
·数据库--适宜处理非常大容量的数据
·剖面显示方便,数据处理能力强
·各种数据显示选项
·能进行线滚动
·测线和组选择选项
·支持排列道
·数值压缩能力包括逻辑算符
·对显示网格和图像的GDB点数据进行交互式链接
图像特性
·符号和剖面绘图选项
·地貌
·数据显示支持空中重新投影
·用链接阴影光标显示多个图像
·对网格和矢量组进行个别透明化设置
·全部放大和展开功能
·全部编辑多面体,线,多面线和矩形
·编辑/移除/添加矢量组
·多面体编辑条,屏除带和编辑带
·拖动圆/椭圆及N条边的多面体
·无限制地取消/重新进行图像编辑
众多网格算法
·最小曲率法(随机)
·线性法(双向)
·趋势化网格
·平滑(自然相邻,线性,最近邻边)
·梯度网格
·克里格法
网格处理及增强工具
·交互式阴影显示
·创建阴影地貌网格
·显示网格轮廓
·网格窗口
·标准网格统计工具
高级网格应用
·网格滤波
·网格峰值
·网格布尔算子显示重叠网格或显示重叠的网格部分
·网格算数函数
·网格体积
·网格屏蔽
支持的数据格式
Oasis montaj提供无缝输入原始空间数据和处理后的格式(网格,图像和矢量图)
空间数据输入格式,包括:
ASCII数据文件,CSV 数据库表格文件(单个或所有表格)
EXCEL表格 GEOSOFT XYZ数据文件
GEOSOFT二进制数据文件 Flat文档数据文件
块状二进制数据文件 ODBC数据文件
ASEG GDF文件 RMS数据文件
Picodas PDAS 数据文件 USGS 数据文件
AMIRA 格式文件
处理后的数据输入格式,包括:
Mapinfo TAB文件 ArcView图形文件
Microstation DGN文件 Maxwell Plate文件
AutoCAD DXF(DXF) Geosoft plot(PLT)
网格和图形格式
通用网格格式(GRD),包括:
Geosoft 网格文件 Surfer网格文件(GRD)
USGS(.ddf, .dem) DEM文件
Earth Resource Mapper(ERM) Grid exchange Format(GXF)
通用图像格式(IMG),包括:
BMP PCX
TIF TIFF
TGA IMG
JPG J2K JPEG 2000
WPG GIX
PCD PNG
EOSAT MSS Landsat MSS, Landsat TM
系统要求
操作系统: 建议用WINDOWS XP, WINDOWS 2000
CPU: 需要奔腾CPU
内存: 建议512MB及以上,至少128MB
图形: 建议24位图形卡带3D加速,需要全彩色图像.建议64兆内存卡
打印机/绘图仪: 任何彩色打印机,建议惠普大格式喷墨绘图仪
安装空间: 400兆
数据空间: 40-100G
montaj扩展模块
-高级地球物理,地质和地球化学分析
Montaj地球物理模块
Montaj地球物理扩展模块提供了一系列的滤波和统计工具来处理大体积的地球物理数据.空间一维滤波使野外地球物理学家用各种空间域滤波(线性和非线性)来处理数据.一维快速付立叶变换滤波可以将各种频域滤波用到一维(线性)势场和其它数据.各种地质统计工具用来做概览和高级统计,包括矩形图,分散图,三维成图分析,并根据代码或图形组分类来细化数据.
Montaj地球化学模块
Montaj地球化学扩展模块提供QA/QC(质量分析/质量控制)和分析功能以确保地球化学数据具有最高质量.地球化学测定数据一般包括抽取和分析的标准及复制样本,以确保所有结果在统计范围内.该模块包括易于使用的标准和复制处理功能,以便容易进行质量控制处理,确保你从实验室得到的数据是有效的.它是必需的部分.
Montaj钻孔成图模块
Montaj钻孔成图扩展模块可以快速,方便准确地产生钻孔断面和平面图的结果解释.用Oasis montaj软件,钻孔数据可以显示在三维空间中.该扩展模块可以让地质学家设置钻孔任务,动态管理结果,并为后续钻孔和做决定提供解释结果.扩展模块包括平面,断面,迭加断面和三维视图.另外还包括柱状录井图和复合工具来显示,每图可显示多达16个柱状录井图,并在绘制的柱状录井图中计算和注释纵 合钻孔间隔.
Montaj航空质量控制模块
Montaj航空质量控制扩展模块提供了航空测量平面图和基本指标的必要工具.扩展模块包括飞行路径成图工具,探测进展监控,流线型质量控制(QC)工具.它的内置成图功能自动显示QC结果.质量控制功能可以测试高程偏差,飞行路径偏差,航线间隔,采样间距,每日偏移和磁场噪声.
Montaj地球物理水准测量模块
Montaj地球物理水准测量扩展模块包括用于处理和增强航空磁场和其它地球物理数据的高级工具.它能一步步地完成各种水准测量和校准任务.微型水准测量工具箱可以对线性数据进行微水准测量校准.
Montaj未知物探测模块
Montaj未知物探测扩展模块是根据磁场(总场强和梯度仪)和电磁数据,对未知物目标体进行定位和分析的软件.采用未知物探测模块可以从大量数据中对未知物目标体进行快速定位,并将其定位于很小的区域.地球物理校准工具可以从源数据中识别和去除背景或仪器产生的噪声.并能确定未知物的埋深,尺寸和视在重量.
Montaj MAGMAP滤波模块
Montaj MAGMAP滤波扩展模块提供二维快速付立叶变换(FFT)滤波,它可以应用到网格数据的频域滤波中.通过广泛应用地球物理和数学滤波,MAGMAP可以快速处理网格数据.该扩展模块可以同时应用多个滤波功能,修改和定义选择的滤波参数,并将其应用到自己的滤波中.
Montaj网格编织模块
Montaj网格编织模块提供两种高级方法快速准确地联合任何地球物理网格.融合方法通过标准平滑函数快速联合网格;缝合方法可以手动或自动定义联合路径,然后应用合适的多频校正来消除沿路径的两个网格间的差别.”邮票”缝合可以很方便地将高精度网格插到某一部分的背景中.
Montaj重力/磁力解释模块
Montaj重力/磁力解释扩展模块包括欧拉三维反褶积处理来自动对网格化的磁力和重力数据定位和确定深度.欧拉三维通过描绘磁力和重力边界及计算源深度,自动得出三维地质解释.该模块也包括开亭磁场校正系数方法来探测金伯利岩.该方法使用简单的样式识别技术通过比拟金伯利岩管道模型来定位磁场异常.该模块也包括 源缘检测(SED)方法来确定边缘(如地质界面)或通过对势场数据进 行梯度分析来确定峰值.源参数成像(SPI)方法快速方便地计算磁场深度.
Montaj激发极化模块
Montaj激发极化扩展模块可以对IP数据进行输入,质量控制,处理,网格化和成图.该模块适用于承包人和地球物理学家.它可以从时域和频域探测中输入,进行基本质量控制,处理和解释数据.输入Zonge, Iris, Scintrex,Phoenix和Geosoft格式的时域或频域数据,对偶极-偶极,极-偶极,极-极,梯度探测数据进行处理.自动计算视电阻率,金属因子,激发极化,感应极化和时间切片.用独特的质量控制技术对复制的样点进行评估.用标准的pant-leg滤波对数据进行滤波.产生伪断面解释图,包括迭加断面,并即时将迭加断面转换到三维显示中.
Montaj 256道辐射度处理模块
Montaj 256道辐射度处理扩展模块可以对256道光谱仪数据进行视图和处理.通过对数据进行透视化处理,可以对航空光谱仪探测产生三个主要部分---采集,处理和解释.该扩展模块主要用来对航空测量采集的原始数据进行处理.
Montaj重力和地形校正模块
Montaj重力和地形校正扩展模块提供了从传统地面测量中处理和减少重力数据的完备的手段,从数字高程模块(DEM)中应用地形校正或对高程数据网格化.采用流线菜单系统,可以快速方便地进行所有标准重力处理.另外,它独特的最佳地形减少算法可以快速准确地进行校正,甚至对非常大的数据也是如此.
posted @ 2011-12-01 14:11 * 天堂在线 * 阅读(42) 评论(0)
编辑
Geosoft Oasis.Montaj.v7.1.1 1CD(用于矿脉钻探、天然气钻探、包含大地环境的地科研究项目,与未爆弹侦测等作业)\
Eencom PA 8\
Eencom Profile Analyst 8.0.16\
Encom Discover v10.01 1CD(桌面地理信息系统)\
Encom ModelVision v9.06\
RSoft Photonics CAD Suite v5.185-ISO\
Drillbench Suite v5.01 1CD(钻井作业设计及规划软件
RunGE XPAC v7.5.5-ISO 1CD(煤矿设计软件)
Hampson.Russell.CE8.R4.3.X64_地球物理勘探软件\
Hampson.Russell.CE8.R4.3.X86_地球物理勘探软件\
GAEA Winlog v4.47 1CD(创建钻井日志和测井曲线的工具)
Gedco.Omni.3D.Design.V8.0三维地震勘测设计\
WinGLink.v2.01 1CD(加工和解释非地震引起的物理数据的集成软件包)\
CMG Suite v2008.12.20 1CD(油气储存建模)\
Landmark.OpenWorks.V2003.12\
Petrel.v2009.1-ISO 1CD(勘探开发一体化油藏综合描述软件)\
Terra Vista 3.0 (先进的3D地型形成系统)
RES2DINV v3.55.35(支持陆地,海底和钻孔测量 ,生成二维的数字测量数据)\
RES3DINV.v2.15f(地质学软件,利用地表的二维数字测量数据建立地表以下的三维模型)\
GoCAD v2009 三维地质建模软件系统\
CSI Perform 3D v4.03 1CD(地震工程静力Pushover分析和非线性动力响应时程分析\
CSI SAP2000 ChnSimp v11.0 简体中文版\
GoCAD v2009 完整版三维地质建模软件系统_usb\
Basinmod 1D v5.4 1CD 盆地模拟软件\
Maptek.Vulcan.V7.0SP4 &SP 6 矿业软件\
MICROMINE.V11 中英文矿业软件 Micromine v11.0.0.743-ISO\
Gedco.Omni.3D.Design.V8.0三维地震勘测设计\
WinGLink.v2.01 1CD(加工和解释非地震引起的物理数据的集成软件包)\
CMG Suite v2008.12.20 1CD(油气储存建模)\
Landmark.OpenWorks.V2003.12\
Petrel.v2009.1-ISO 1CD(勘探开发一体化油藏综合描述软件)\
ADT3.3中文版(Architectural_Desktop_3_3
SuperMap(Deskpro5.0、IS .NET 5、Objects 5.0)
Argis8.3 4CD (内含Arcinfo 8.3)*地理地图信息
ARCVIEW 8.0/ ARCVIEW GIS VERSION 3.0A 桌面地理信息系统
北京威远图SV300* ZHMap 2.0中翰数字成图软件(威远图)(复制狗)
CASS6.0/6.11* 数字化地形地籍成图软件
ERDAS IMAGINE 8.7遥感图像处理系统
CASS6.1 南方成图软件
Fledermaus.Pro.v6.3.0o(强大的3D数据可视化系统,它可以帮助用户完成包括海洋(海岸、海底)资源调查与制图、
环境影响评估、采矿、地质调查以及各种研究等等在内的工作)
TerrianCAD 1.0.3(地形生成、编辑和建模工具,通过一系列的不规则的测量点,裂缝线和等高线生成地形网)
Analytic Graphics STK ArcInc Basic Globe 4.0 1CD(1km的地球影像地形纹理库)
Analytic Graphics STK 地图地形数据 2CD
包括:----->STK/High Resolution Maps (hiresmap)高分辨率数字地图
----->STK/Terrain高程数据,全球三维数字地形
posted @ 2011-12-01 14:09 * 天堂在线 * 阅读(73) 评论(0)
编辑
一、 PostgreSQL与PostGIS的关系
PostgreSQL 是世界上技术最先进的开源数据库,其前身是1977年一个源于Berkeley名为Ingres的非关系型数据库,其项目领导人为Michael Stonebraker教授。1982年该教授商业化了Ingres;1985年,Michael Stonebraker教授回到Berkeley,开始对新的数据库设计进行研究,并于次年在美国防务高级研究项目局(DARPA)、陆军研究办公室 (ARO)、国家科学基金(NSF)以及ESL, Inc等机构的赞助下启动了Postgres(Post-Ingres)项目。
Postgres 在1987年形成第一个Demo,1989年发布第一个版本,直到1993年的4.2版本,由于外部用户过多,做技术支持和维护源代码的时间影响到了对数 据库的研究,因此Berkeley中止了该项目。在此期间,Postgres项目就已经被使用在了一些GIS系统中。
Postgres项 目并未就此消亡,在1994年两个Berkeley的研究生向Postgres中加入了SQL语言解释器,将之改名为Postgre95并发布到了互联网 上。经过一些黑客的修改,1996年Postgres95再次更名为PostgreSQL,并采用BSD许可证发布了第一个开源版本。经过多年发 展,PostgreSQL已经发展成为一个技术非常先进的开源数据库,其支持特性之多性能之强可与诸多高级商业数据库比肩。
这里提供了一个世界上主流数据库的特性比较,有兴趣的可以从中管窥PostgreSQL在数据库领域中的成就。
http://en.wikipedia.org/wiki/Comparison_of_relational_database_management_systems
PostGIS 则是PostgreSQL的一个扩展,目的是使PostgreSQL支持空间数据的存储和使用,其本质类似于ArcSDE和Oracle Spatial Extension。PostGIS是采用GPL许可发布的,完整地实现了OGC的《Simple Features Specification for SQL》规范,并于2006年获得OGC认证。在此基础上,PostGIS还对规范进行了一些扩展,在后面的特性中我们可以慢慢了解到。
二、 PostGIS中的几何类型
PostGIS支持所有OGC规范的“Simple Features”类型,同时在此基础上扩展了对3DZ、3DM、4D坐标的支持。
1. OGC的WKB和WKT格式
OGC定义了两种描述几何对象的格式,分别是WKB(Well-Known Binary)和WKT(Well-Known Text)。
在SQL语句中,用以下的方式可以使用WKT格式定义几何对象:
POINT(0 0) ——点
LINESTRING(0 0,1 1,1 2) ——线
POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1)) ——面
MULTIPOINT(0 0,1 2) ——多点
MULTILINESTRING((0 0,1 1,1 2),(2 3,3 2,5 4)) ——多线
MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1))) ——多面
GEOMETRYCOLLECTION(POINT(2 3),LINESTRING((2 3,3 4))) ——几何集合
以下语句可以使用WKT格式插入一个点要素到一个表中,其中用到的GeomFromText等函数在后面会有详细介绍:
INSERT INTO table ( SHAPE, NAME )
VALUES ( GeomFromText('POINT(116.39 39.9)', 4326), '北京');
2. EWKT、EWKB和Canonical格式
EWKT和EWKB相比OGC WKT和WKB格式主要的扩展有3DZ、3DM、4D坐标和内嵌空间参考支持。
以下以EWKT语句定义了一些几何对象:
POINT(0 0 0) ——3D点
SRID=32632;POINT(0 0) ——内嵌空间参考的点
POINTM(0 0 0) ——带M值的点
POINT(0 0 0 0) ——带M值的3D点
SRID=4326;MULTIPOINTM(0 0 0,1 2 1) ——内嵌空间参考的带M值的多点
以下语句可以使用EWKT格式插入一个点要素到一个表中:
INSERT INTO table ( SHAPE, NAME )
VALUES ( GeomFromEWKT('SRID=4326;POINTM(116.39 39.9 10)'), '北京' )
Canonical格式是16进制编码的几何对象,直接用SQL语句查询出来的就是这种格式。
3. SQL-MM格式
SQL-MM格式定义了一些插值曲线,这些插值曲线和EWKT有点类似,也支持3DZ、3DM、4D坐标,但是不支持嵌入空间参考。
以下以SQL-MM语句定义了一些插值几何对象:
CIRCULARSTRING(0 0, 1 1, 1 0) ——插值圆弧
COMPOUNDCURVE(CIRCULARSTRING(0 0, 1 1, 1 0),(1 0, 0 1)) ——插值复合曲线
CURVEPOLYGON(CIRCULARSTRING(0 0, 4 0, 4 4, 0 4, 0 0),(1 1, 3 3, 3 1, 1 1)) ——曲线多边形
MULTICURVE((0 0, 5 5),CIRCULARSTRING(4 0, 4 4, 8 4)) ——多曲线
MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(0 0, 4 0, 4 4, 0 4, 0 0),(1 1, 3 3, 3 1, 1 1)),((10 10, 14 12, 11 10, 10 10),(11 11, 11.5 11, 11 11.5, 11 11))) ——多曲面
三、 PostGIS中空间信息处理的实现
1. spatial_ref_sys表
在基于PostGIS模板创建的数据库的public模式下,有一个spatial_ref_sys表,它存放的是OGC规范的空间参考。我们取我们最熟悉的4326参考看一下:

它的srid存放的就是空间参考的Well-Known ID,对这个空间参考的定义主要包括两个字段,srtext存放的是以字符串描述的空间参考,proj4text存放的则是以字符串描述的PROJ.4 投影定义(PostGIS使用PROJ.4实现投影)。
4326空间参考的srtext内容:
GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
4326空间参考的proj4text内容:
+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs
2. geometry_columns表
geometry_columns表存放了当前数据库中所有几何字段的信息,比如我当前的库里面有两个空间表,在geometry_columns表中就可以找到这两个空间表中几何字段的定义:

其中f_table_schema字段表示的是空间表所在的模式,f_table_name字段表示的是空间表的表名,f_geometry_column字段表示的是该空间表中几何字段的名称,srid字段表示的是该空间表的空间参考。
3. 在PostGIS中创建一个空间表
在PostGIS中创建一个包含几何字段的空间表分为2步:第一步创建一个一般表,第二步给这个表添加几何字段。
以下先在test模式下创建一个名为cities的一般表:
create table test.cities (id int4, name varchar(20))
再给cities添加一个名为shape的几何字段(二维点):
select AddGeometryColumn('test', 'cities', 'shape', 4326, 'POINT', 2)
4. PostGIS对几何信息的检查
PostGIS可以检查几何信息的正确性,这主要是通过IsValid函数实现的。
以下语句分辨检查了2个几何对象的正确性,显然,(0, 0)点和(1,1)点可以构成一条线,但是(0, 0)点和(0, 0)点则不能构成,这个语句执行以后的得出的结果是TRUE,FALSE。
select IsValid('LINESTRING(0 0, 1 1)'), IsValid('LINESTRING(0 0,0 0)')
默认PostGIS并不会使用IsValid函数检查用户插入的新数据,因为这会消耗较多的CPU资源(特别是复杂的几何对象)。当你需要使用这个功能的时候,你可以使用以下语句为表新建一个约束:
ALTER TABLE cities
ADD CONSTRAINT geometry_valid
CHECK (IsValid(shape))
这时当我们往这个表试图插入一个错误的空间对象的时候,会得到一个错误:
INSERT INTO test.cities ( shape, name )
VALUES ( GeomFromText('LINESTRING(0 0,0 0)', 4326), '北京');
ERROR: new row for relation "cities" violates check constraint "geometry_valid"
SQL 状态: 23514
5. PostGIS中的空间索引
数据库对多维数据的存取有两种索引方案,R-Tree和GiST(Generalized Search Tree),在PostgreSQL中的GiST比R-Tree的健壮性更好,因此PostGIS对空间数据的索引一般采用GiST实现。
以下的语句给sde模式中的cities表添加了一个空间索引shape_index_cities,在pgAdmin中也可以通过图形界面完成相同的功能。
CREATE INDEX shape_index_cities
ON sde.cities
USING gist
(shape);
另外要注意的是,空间索引只有在进行基于边界范围的查询时才起作用,比如“&&”操作。
四、 PostGIS中的常用函数
以下内容包括比较多的尖括号,发布到blogger的时候会显示不正常,内容太多我也无暇一个个手动改代码,因此如有问题就去参考PostGIS官方文档。
首先需要说明一下,这里许多函数是以ST_[X]yyy形式命名的,事实上很多函数也可以通过xyyy的形式访问,在PostGIS的函数库中我们可以看到这两种函数定义完全一样。
1. OGC标准函数
管理函数:
添加几何字段 AddGeometryColumn(, , , , , )
删除几何字段 DropGeometryColumn(, , )
检查数据库几何字段并在geometry_columns中归档 Probe_Geometry_Columns()
给几何对象设置空间参考(在通过一个范围做空间查询时常用) ST_SetSRID(geometry, integer)
几何对象关系函数:
获取两个几何对象间的距离 ST_Distance(geometry, geometry)
如果两个几何对象间距离在给定值范围内,则返回TRUE ST_DWithin(geometry, geometry, float)
判断两个几何对象是否相等
(比如LINESTRING(0 0, 2 2)和LINESTRING(0 0, 1 1, 2 2)是相同的几何对象) ST_Equals(geometry, geometry)
判断两个几何对象是否分离 ST_Disjoint(geometry, geometry)
判断两个几何对象是否相交 ST_Intersects(geometry, geometry)
判断两个几何对象的边缘是否接触 ST_Touches(geometry, geometry)
判断两个几何对象是否互相穿过 ST_Crosses(geometry, geometry)
判断A是否被B包含 ST_Within(geometry A, geometry B)
判断两个几何对象是否是重叠 ST_Overlaps(geometry, geometry)
判断A是否包含B ST_Contains(geometry A, geometry B)
判断A是否覆盖 B ST_Covers(geometry A, geometry B)
判断A是否被B所覆盖 ST_CoveredBy(geometry A, geometry B)
通过DE-9IM 矩阵判断两个几何对象的关系是否成立 ST_Relate(geometry, geometry, intersectionPatternMatrix)
获得两个几何对象的关系(DE-9IM矩阵) ST_Relate(geometry, geometry)
几何对象处理函数:
获取几何对象的中心 ST_Centroid(geometry)
面积量测 ST_Area(geometry)
长度量测 ST_Length(geometry)
返回曲面上的一个点 ST_PointOnSurface(geometry)
获取边界 ST_Boundary(geometry)
获取缓冲后的几何对象 ST_Buffer(geometry, double, [integer])
获取多几何对象的外接对象 ST_ConvexHull(geometry)
获取两个几何对象相交的部分 ST_Intersection(geometry, geometry)
将经度小于0的值加360使所有经度值在0-360间 ST_Shift_Longitude(geometry)
获取两个几何对象不相交的部分(A、B可互换) ST_SymDifference(geometry A, geometry B)
从A去除和B相交的部分后返回 ST_Difference(geometry A, geometry B)
返回两个几何对象的合并结果 ST_Union(geometry, geometry)
返回一系列几何对象的合并结果 ST_Union(geometry set)
用较少的内存和较长的时间完成合并操作,结果和ST_Union相同 ST_MemUnion(geometry set)
几何对象存取函数:
获取几何对象的WKT描述 ST_AsText(geometry)
获取几何对象的WKB描述 ST_AsBinary(geometry)
获取几何对象的空间参考ID ST_SRID(geometry)
获取几何对象的维数 ST_Dimension(geometry)
获取几何对象的边界范围 ST_Envelope(geometry)
判断几何对象是否为空 ST_IsEmpty(geometry)
判断几何对象是否不包含特殊点(比如自相交) ST_IsSimple(geometry)
判断几何对象是否闭合 ST_IsClosed(geometry)
判断曲线是否闭合并且不包含特殊点 ST_IsRing(geometry)
获取多几何对象中的对象个数 ST_NumGeometries(geometry)
获取多几何对象中第N个对象 ST_GeometryN(geometry,int)
获取几何对象中的点个数 ST_NumPoints(geometry)
获取几何对象的第N个点 ST_PointN(geometry,integer)
获取多边形的外边缘 ST_ExteriorRing(geometry)
获取多边形内边界个数 ST_NumInteriorRings(geometry)
同上 ST_NumInteriorRing(geometry)
获取多边形的第N个内边界 ST_InteriorRingN(geometry,integer)
获取线的终点 ST_EndPoint(geometry)
获取线的起始点 ST_StartPoint(geometry)
获取几何对象的类型 GeometryType(geometry)
类似上,但是不检查M值,即POINTM对象会被判断为point ST_GeometryType(geometry)
获取点的X坐标 ST_X(geometry)
获取点的Y坐标 ST_Y(geometry)
获取点的Z坐标 ST_Z(geometry)
获取点的M值 ST_M(geometry)
几何对象构造函数:
参考语义:
Text:WKT
WKB:WKB
Geom:Geometry
M:Multi
Bd:BuildArea
Coll:Collection ST_GeomFromText(text,[])
ST_PointFromText(text,[])
ST_LineFromText(text,[])
ST_LinestringFromText(text,[])
ST_PolyFromText(text,[])
ST_PolygonFromText(text,[])
ST_MPointFromText(text,[])
ST_MLineFromText(text,[])
ST_MPolyFromText(text,[])
ST_GeomCollFromText(text,[])
ST_GeomFromWKB(bytea,[])
ST_GeometryFromWKB(bytea,[])
ST_PointFromWKB(bytea,[])
ST_LineFromWKB(bytea,[])
ST_LinestringFromWKB(bytea,[])
ST_PolyFromWKB(bytea,[])
ST_PolygonFromWKB(bytea,[])
ST_MPointFromWKB(bytea,[])
ST_MLineFromWKB(bytea,[])
ST_MPolyFromWKB(bytea,[])
ST_GeomCollFromWKB(bytea,[])
ST_BdPolyFromText(text WKT, integer SRID)
ST_BdMPolyFromText(text WKT, integer SRID)
2. PostGIS扩展函数
管理函数:
删除一个空间表(包括geometry_columns中的记录) DropGeometryTable([], )
更新空间表的空间参考 UpdateGeometrySRID([], , , )
更新空间表的统计信息 update_geometry_stats([, ])
参考语义:
Geos:GEOS库
Jts:JTS库
Proj:PROJ4库 postgis_version()
postgis_lib_version()
postgis_lib_build_date()
postgis_script_build_date()
postgis_scripts_installed()
postgis_scripts_released()
postgis_geos_version()
postgis_jts_version()
postgis_proj_version()
postgis_uses_stats()
postgis_full_version()
几何操作符:
A范围=B范围 A = B
A范围覆盖B范围或A范围在B范围左侧 A &<> B
A范围在B范围左侧 A <<>> B
A范围覆盖B范围或A范围在B范围下方 A &<| B A范围覆盖B范围或A范围在B范围上方 A |&> B
A范围在B范围下方 A <<| B A范围在B范围上方 A |>> B
A=B A ~= B
A范围被B范围包含 A @ B
A范围包含B范围 A ~ B
A范围覆盖B范围 A && B
几何量测函数:
量测面积 ST_Area(geometry)
根据经纬度点计算在地球曲面上的距离,单位米,地球半径取值6370986米 ST_distance_sphere(point, point)
类似上,使用指定的地球椭球参数 ST_distance_spheroid(point, point, spheroid)
量测2D对象长度 ST_length2d(geometry)
量测3D对象长度 ST_length3d(geometry)
根据经纬度对象计算在地球曲面上的长度 ST_length_spheroid(geometry,spheroid)
ST_length3d_spheroid(geometry,spheroid)
量测两个对象间距离 ST_distance(geometry, geometry)
量测两条线之间的最大距离 ST_max_distance(linestring,linestring)
量测2D对象的周长 ST_perimeter(geometry)
ST_perimeter2d(geometry)
量测3D对象的周长 ST_perimeter3d(geometry)
量测两点构成的方位角,单位弧度 ST_azimuth(geometry, geometry)
几何对象输出:
参考语义:
NDR:Little Endian
XDR:big-endian
HEXEWKB:Canonical
SVG:SVG 格式
GML:GML 格式
KML:KML 格式
GeoJson:GeoJson 格式
ST_AsBinary(geometry,{'NDR'|'XDR'})
ST_AsEWKT(geometry)
ST_AsEWKB(geometry, {'NDR'|'XDR'})
ST_AsHEXEWKB(geometry, {'NDR'|'XDR'})
ST_AsSVG(geometry, [rel], [precision])
ST_AsGML([version], geometry, [precision])
ST_AsKML([version], geometry, [precision])
ST_AsGeoJson([version], geometry, [precision], [options])
几何对象创建:
参考语义:
Dump:转储 ST_GeomFromEWKT(text)
ST_GeomFromEWKB(bytea)
ST_MakePoint(, , [], [])
ST_MakePointM(, , )
ST_MakeBox2D(, )
ST_MakeBox3D(, )
ST_MakeLine(geometry set)
ST_MakeLine(geometry, geometry)
ST_LineFromMultiPoint(multipoint)
ST_MakePolygon(linestring, [linestring[]])
ST_BuildArea(geometry)
ST_Polygonize(geometry set)
ST_Collect(geometry set)
ST_Collect(geometry, geometry)
ST_Dump(geometry)
ST_DumpRings(geometry)
几何对象编辑:
给几何对象添加一个边界,会使查询速度加快 ST_AddBBOX(geometry)
删除几何对象的边界 ST_DropBBOX(geometry)
添加、删除、设置点 ST_AddPoint(linestring, point, [])
ST_RemovePoint(linestring, offset)
ST_SetPoint(linestring, N, point)
几何对象类型转换 ST_Force_collection(geometry)
ST_Force_2d(geometry)
ST_Force_3dz(geometry), ST_Force_3d(geometry),
ST_Force_3dm(geometry)
ST_Force_4d(geometry)
ST_Multi(geometry)
将几何对象转化到指定空间参考 ST_Transform(geometry,integer)
对3D几何对象作仿射变化 ST_Affine(geometry, float8, float8, float8, float8, float8, float8, float8, float8, float8, float8, float8, float8)
对2D几何对象作仿射变化 ST_Affine(geometry, float8, float8, float8, float8, float8, float8)
对几何对象作偏移 ST_Translate(geometry, float8, float8, float8)
对几何对象作缩放 ST_Scale(geometry, float8, float8, float8)
对3D几何对象作旋转 ST_RotateZ(geometry, float8)
ST_RotateX(geometry, float8)
ST_RotateY(geometry, float8)
对2D对象作偏移和缩放 ST_TransScale(geometry, float8, float8, float8, float8)
反转 ST_Reverse(geometry)
转化到右手定则 ST_ForceRHR(geometry)
参考IsSimple函数
使用Douglas-Peuker算法 ST_Simplify(geometry, tolerance)
ST_SimplifyPreserveTopology(geometry, tolerance)
讲几何对象顶点捕捉到网格 ST_SnapToGrid(geometry, originX, originY, sizeX, sizeY)
ST_SnapToGrid(geometry, sizeX, sizeY), ST_SnapToGrid(geometry, size)
第二个参数为点,指定原点坐标 ST_SnapToGrid(geometry, geometry, sizeX, sizeY, sizeZ, sizeM)
分段 ST_Segmentize(geometry, maxlength)
合并为线 ST_LineMerge(geometry)
线性参考:
根据location(0-1)获得该位置的点 ST_line_interpolate_point(linestring, location)
获取一段线 ST_line_substring(linestring, start, end)
根据点获取location(0-1) ST_line_locate_point(LineString, Point)
根据量测值获得几何对象 ST_locate_along_measure(geometry, float8)
根据量测值区间获得几何对象集合 ST_locate_between_measures(geometry, float8, float8)
杂项功能函数:
几何对象的摘要 ST_Summary(geometry)
几何对象的边界 ST_box2d(geometry)
ST_box3d(geometry)
多个几何对象的边界 ST_extent(geometry set)
0=2d, 1=3dm, 2=3dz, 3=4d ST_zmflag(geometry)
是否包含Bounding Box ST_HasBBOX(geometry)
几何对象的维数:2、3、4 ST_ndims(geometry)
子对象的个数 ST_nrings(geometry)
ST_npoints(geometry)
对象是否验证成功 ST_isvalid(geometry)
扩大几何对象 ST_expand(geometry, float)
计算一个空间表的边界范围 ST_estimated_extent([schema], table, geocolumn)
获得空间参考 ST_find_srid(, , )
几何对象使用的内存大小,单位byte ST_mem_size(geometry)
点是否在圆上 ST_point_inside_circle(,,,)
获取边界的X、Y、Z ST_XMin(box3d)
ST_YMin(box3d)
ST_ZMin(box3d)
ST_XMax(box3d)
ST_YMax(box3d)
ST_ZMax(box3d)
构造一个几何对象的数组 ST_Accum(geometry set)
长事务支持:
启用/关闭长事务支持,重复调用无副作用 EnableLongTransactions()
DisableLongTransactions()
检查对行的update和delete操作是否已授权 CheckAuth([],
,
)
锁定行 LockRow([],
, , , [])
解锁行 UnlockRows()
在当前事务中添加授权ID AddAuth()
其它还有SQL-MM和ArcSDE样式的函数支持,可以参考http://postgis.refractions.net/documentation/manual-1.3/ch06.html#id2750611,这里就不详细列了。
五、 PostGIS示例
下面我们通过一个简单的Flex应用示例来看一下PostGIS的用法:
假想现在发生了恐怖袭击,导致在一些城市有污染物出现,现在我们要根据污染物和当地风力、风向情况,计算污染扩散范围,针对这些区域及时进行警报和疏散。
首先我们希望获得所有发生污染的城市的当前风速、风向等信息,在我们的PostGIS数据库中有一个空间表保存着这些信息,我们构造这样的SQL语句进行查询:
select *,ST_AsGeoJson(shape) from sde.wind
这里会获取所有风相关的信息,并且附加了以JSON格式返回的几何信息,这有助于我们在Flex中进行解析。如下图是关于风的查询结果:

下 面我们希望PostGIS帮助我们实现一些空间分析。我们以污染发生的城市为起点,当地风向为主方向,构造一个30度开角的范围;这个范围将是污染扩散的 主要方向,扩散的范围主要和风的强度有关;在构造这个区域以后,为了保险起见,我们在对其进行一定范围的缓冲,最后得到每个污染源可能扩散的范围。我们构 造的SQL语句如下:
select *,ST_AsGeoJson( ST_Buffer( ST_PolygonFromText( 'POLYGON((' ||ST_X(shape)||' '||ST_Y(shape)||',' ||ST_X(shape)+velocity*cos((direction+15)*PI()/180)/20||' '||ST_Y(shape)+velocity*sin((direction+15)*PI()/180)/20||',' ||ST_X(shape)+velocity*cos((direction-15)*PI()/180)/20||' '||ST_Y(shape)+velocity*sin((direction-15)*PI()/180)/20||',' ||ST_X(shape)||' '||ST_Y(shape)||'))' ) , velocity/50 ) ) from sde.wind
下面是PostGIS进行运算后返回的结果:

在这里,Flex应用与服务器的交互通过BlazeDS进行,下面是本示例在服务器端的Java代码:
package wuyf;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
public class Wind
{
private Connection conn = null;
public Connection getConn()
{
if (conn==null)
{
try
{
Class.forName("org.postgresql.Driver");
String url = "jdbc:postgresql://localhost:5432/sde" ;
conn = DriverManager.getConnection(url, "sde" , "pwd" );
conn.setAutoCommit(false);
}
catch(Exception e)
{
System.err.print(e);
}
}
return conn;
}
public ArrayList > getWinds()
{
ArrayList> result = new ArrayList>();
if ( this.getConn()==null )
return result;
try
{
String sql = "select *,ST_AsGeoJson(shape) from sde.wind";
Statement st = this.getConn().createStatement();
st.setFetchSize(0);
ResultSet rs = st.executeQuery(sql);
while (rs.next())
{
HashMap map = new HashMap();
map.put("shape", rs.getString("ST_AsGeoJson"));
map.put("velocity", rs.getString("velocity"));
map.put("direction", rs.getString("direction"));
result.add(map);
}
rs.close();
st.close();
}
catch(Exception e)
{
System.err.print(e);
}
return result;
}
public ArrayList > getEffectZones()
{
ArrayList> result = new ArrayList>();
if ( this.getConn()==null )
return result;
try
{
String sql = "select *,ST_AsGeoJson(";
sql+= "ST_Buffer(";
sql+= "ST_PolygonFromText(";
sql+= "'POLYGON(('";
sql+= "||ST_X(shape)||' '||ST_Y(shape)||','";
sql+= "||ST_X(shape)+velocity*cos((direction+15)*PI()/180)/20||' '||ST_Y(shape)+velocity*sin((direction+15)*PI()/180)/20||','";
sql+= "||ST_X(shape)+velocity*cos((direction-15)*PI()/180)/20||' '||ST_Y(shape)+velocity*sin((direction-15)*PI()/180)/20||','";
sql+= "||ST_X(shape)||' '||ST_Y(shape)||'))'";
sql+= ")";
sql+= ", velocity/50";
sql+= ")";
sql+= ") ";
sql+="from sde.wind";
Statement st = this.getConn().createStatement();
st.setFetchSize(0);
ResultSet rs = st.executeQuery(sql);
while (rs.next())
{
HashMap map = new HashMap();
map.put("shape", rs.getString("ST_AsGeoJson"));
map.put("velocity", rs.getString("velocity"));
map.put("direction", rs.getString("direction"));
result.add(map);
}
rs.close();
st.close();
}
catch(Exception e)
{
System.err.print(e);
}
return result;
}
}
引自: 牛魔王的作坊
posted @ 2009-04-28 11:09 * 天堂在线 * 阅读(5392) 评论(0)
编辑