geoserver——Image Mosaic JDBC
目录
Image Mosaic JDBC
此gt-imagemosaic-jdbc插件旨在处理存储为JDBC数据库中的切片的大型图像。金字塔创建的平铺也存储在数据库中。该实用程序使用数据库索引来加速对所请求磁贴的访问,该插件本身具有多线程架构,可以使用双/四核CPU和多处理器系统。
细节
这个插件应该可以让你在JDBC数据库中使用金字塔处理大图像。
积分:
- 该模块由Google资助,作为GSOC 08计划的一部分。
经测试的数据库系统
- DB2(带或不带Spatial Extender)
- Oracle(有或没有基于位置的服务,不需要Oracle Spatial)
- MySQL的
- Postgres(有或没有Postgis)
- H2
示例使用
此示例显示如何使用该模块:
// 首先, 获得 一个 读者
// 的 configUrl 引用 的 配置 XML &NBSP ; 并且 是 对象 的 一个 的 所述 以下 类型
// 1 ) 的java 。网。URL
// 2 ) java 。io 。文件
// 3 ) java 。郎。字符串 (一个 文件名 字符串 或 一个 URL 字符串)
AbstractGridFormat format = (AbstractGridFormat )GridFormatFinder 。findFormat (configUrl );
ImageMosaicJDBCReader reader = (ImageMosaicJDBCReader )格式。getReader (configUrl ,null );
// 取得 一 参数 对象 为 一个 网格 几何
的parameterValue < GridGeometry2D > GG = AbstractGridFormat 。READ_GRIDGEOMETRY2D 。createValue ();
// 创建 一个 包络, 2 点, 下 左 和 上 右, X ,ÿ 顺序
GeneralEnvelope 信封 = 新 GeneralEnvelope (新 双[] { 10 ,20 },新 双[] { 30 ,40 });
// 设置 一个 CRS 用于 该 信封
的信封。setCoordinateReferenceSystem (CRS 。解码“EPSG:4326” );
// 设置 的 信封 到 的 参数 对象
GG 。的setValue (新 GridGeometry2D (新 GeneralGridRange (新 矩形(0 , 0 , 宽度, heigth )),包络));
// 创建 一个 参数 对象 为 所述 背景 色 (NODATA ), 这 PARAM 是 可选的
最终 的parameterValue outTransp = ImageMosaicJDBCFormat 。BACKGROUND_COLOR 。createValue ();
outTransp 。的setValue (颜色。WHITE );
// 如果 你 喜欢 一个 透明 背景, 使用 这个
// 最后 的parameterValue outTransp = ImageMosaicJDBCFormat 。OUTPUT_TRANSPARENT_COLOR 。createValue ();
// outTransp 。的setValue (颜色。WHITE );
// 调用 的 插件 传递 的 阵列 与 所述 2名 参数 对象
尝试 {
GridCoverage2D 覆盖率 = (GridCoverage2D ) 读取器。read (new GeneralParameterValue [] { gg , outTransp });
} catch (IOException e ) {
e 。printStackTrace ();
}
表和属性名称的映射
由于不同企业中存在大量命名约定,因此强制使用预定义的表和属性名称并不理想。在我们的示例中,可以选择空间表和切片表的名称,假设元表的名称和所有属性名称。这些名称的映射是XML配置的一部分。相应的XML片段显示了假定名称的映射。
一个示例XML片段文件mapping.xml.inc:
<! - 可能的值:universal,postgis,db2,mysql,oracle - >
<spatialExtension name =“universal”/>
<映射>
<masterTable name =“META”>
<coverageNameAttribute name =“Name”/>
<maxXAttribute name =“MaxX”/>
<maxYAttribute name =“MaxY”/>
<minXAttribute name =“MinX”/>
<minYAttribute name =“MinY”/>
<resXAttribute name =“ResX”/>
<resYAttribute name =“RresY”/>
<tileTableNameAtribute name =“TileTable”/>
<spatialTableNameAtribute name =“SpatialTable”/>
</ masterTable>
<接边>
<blobAttributeName name =“Data”/>
<keyAttributeName name =“Location”/>
</接边>
<spatialTable>
<keyAttributeName name =“Location”/>
<geomAttributeName name =“Geom”/>
<tileMaxXAttribute name =“MaxX”/>
<tileMaxYAttribute name =“MaxY”/>
<tileMinXAttribute name =“MinX”/>
<tileMinYAttribute name =“MinY”/>
</ spatialTable>
</映射>
此XML片段的结构保持非常简单,将其用作模式。
<spatialExtension>的name属性必须是以下值之一
- 通用(供应商中立的JDBC方法,可以与任何支持BLOB的JDBC数据库一起使用)
- db2(使用空间扩展器)
- mysql(使用mysql的空间功能)
- postgis(使用postgis的空间特征)
- oracle(使用每个oracle版本中包含的基于位置的服务,不需要oracle空间!!!)
如果您的空间扩展是通用的,则需要指定<tileMinXAttribute>,<tileMinYAttribute>,<tileMaxXAttribute>,<tileMaxYAttribute>,但您可以省略<geomAttributeName>。
在所有其他情况下,您需要<geomAttributeName>元素并且可以省略<tileMinXAttribute>,<tileMinYAttribute>,<tileMaxXAttribute>,<tileMaxYAttribute>。
请注意不同DBMS产品的区分大小写。请查看http://www.alberton.info/dbms_identifiers_and_case_sensitivity.html和http://en.wikibooks.org/wiki/SQL_dialects_reference/Data_structure_definition/Delimited_identifiers。
在上面的示例中,我们有<maxXAttribute name =“MaxX”/>,这将导致DB2和Oracle的属性名称为MAXX,而postgres的属性名称为maxx。一个好的策略是使用由大写/小写字母组成的标识符(表和属性名称),具体取决于您的DBMS。
这种方法确保没有预定义的表和属性名称,允许无缝集成到现有的命名约定中。
组态
每个Map及其金字塔都由XML文件配置。配置可分为3个部分
- 数据库映射如上所述
- JDBC连接配置
- 地图配置
JDBC Connect配置
根据部署环境,连接数据库的可能性不同。在客户端java应用程序中使用此插件将需要JDBC驱动程序连接,J2EE容器内的操作应该更喜欢JNDI数据源连接(您的管理员会很高兴)。
JDBC驱动程序的示例XML片段文件连接到H2数据库connect.xml.inc:
< connect >
< dstype value = “DBCP” />
< username value = “user” />
< password value = “password” />
< jdbcUrl value = “jdbc:h2:target / h2 / testdata” />
< driverClassName value = “org.h2.Driver” />
< maxActive value = “10” />
< maxIdle value = “0” />
</ connect >
用于连接到JNDI数据源connect.xml.inc的 XML片段:
< connect >
< dstype value = “JNDI” />
< jndiReferenceName value = “jdbc / myDataSourceName” />
</ connect >
地图配置
现在我们可以将这些内容组合在一起并为地图创建配置文件。
示例文件map.xml:
<?xml version =“1.0”encoding =“UTF-8”standalone =“no”?>
<!DOCTYPE ImageMosaicJDBCConfig [
<!ENTITY映射PUBLIC“mapping”“mapping.xml.inc”>
<!ENTITY连接PUBLIC“connect”“connect.xml.inc”>
]>
<config version =“1.0”>
<coverageName name =“oek”/>
<coordsys name =“EPSG:31287”/>
<! - 插值1 =最近邻居,2 =双极,3 =双三 - >
<scaleop interpolation =“1”/>
<axisOrder ignore =“false”/>
<verify cardinality =“false”/>
&映射;
&连接;
</配置>
DOCTYPE包括对connect.xml.inc和mapping.xml.inc的两个XML实体引用。XML解析器在解析时包含这些片段。
内容:
配置
根元素。版本属性保留用于此插件的未来版本。必须是“1.0”。
coverageName
地图的名称。此名称用于在元表中搜索元数据。
的CoordSys
坐标参考系统的名称将由geotools库的CRS.decode()引用。
scaleop
要使用的插值方法(1 =最近邻,2 =双极,3 =双三次)
axisOrder
该模块将读取请求中的CRS与存储在配置中的CRS进行比较。如果轴顺序不同,则执行x轴开关。一些客户端在调用模块之前执行此操作,并且插件再次切换导致原始信封。值“true”会抑制此切换。
校验
如果您在不同的表中有图像数据和地理配准信息,并且属性基数为true,则插件将检查每个表中的记录数。如果数字不相等,图像/金字塔将被删除,您会在日志中看到警告。此检查适用于测试环境,在生产环境中将值设置为false以避免性能不佳。
配置摘要
映射配置由3部分组成,连接配置,映射配置和映射配置。因此,您具有很大的灵活性,可以为许多地图重用部分配置。
转载自:https://blog.csdn.net/qq_36178899/article/details/81386209