切片源信息类定义了瓦片的存储信息、瓦片集类型(UserDefined)、具体的瓦片存储类型等,如地图瓦片的类型为“image”。
扩展形式如下:
public class NationalCacheStandardTileSourceInfo extends TileSourceInfo {
...
}
需要实现的方法有:
| 字段/方法 | 描述 |
| public NationalCacheStandardTileSourceInfo(NationalCacheStandardTileSourceInfo info) | 实现拷贝构造函数 |
| public TileSourceInfo copy() | 实现 copy 方法 |
| public TileSourceType getType() public void setType(TileSourceType type) | 指定存储类型,必须设置为“UserDefined” |
| public TileType[] getSupportedTileTypes() | 指定该存储支持的瓦片类型,如地图瓦片必须指定为“image” |
| public int hashCode() public boolean equals(Object obj) | 实现 hashCode、equals 方法 |
实现拷贝构造函数和 copy 方法
实现拷贝构造函数,方法如下:
public NationalCacheStandardTileSourceInfo(NationalCacheStandardTileSourceInfo info) {
super(info);
this.setOutputPath(info.getOutputPath());
}
实现 copy 方法:
@Override
public TileSourceInfo copy() {
return new NationalCacheStandardTileSourceInfo(this);
}
指定存储类型
需要为扩展的瓦片格式(tileset)定义类型,所有扩展格式的瓦片类型都应该设置为 UserDefined。
public TileSourceType getType() {
return TileSourceType.UserDefined;
}
//所有扩展格式的瓦片类型都应该设置为 UserDefined。
public void setType(TileSourceType type) {
if (!(TileSourceType.UserDefined.equals(type))) {
throw new IllegalArgumentException();
}
super.setType(type);
}
指定瓦片类型
定义扩展的瓦片的存储格式类型,如地图瓦片(栅格格式)需要设置为“Image”。
@Override
public TileType[] getSupportedTileTypes() {
return new TileType[] { TileType.Image };
}
实现 hashCode、equals 方法
public int hashCode() {
HashCodeBuilder builder = new HashCodeBuilder(120000039, 120000041);
String outputPath = getOutputPath();
if (outputPath != null) {
builder.append(Tool.getUniqueAbsoluteFilePath(outputPath));
}
if (getType() != null) {
builder.append(getType());
}
return builder.toHashCode();
}
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (obj == this) {
return true;
}
if (!(obj instanceof NationalCacheStandardTileSourceInfo)) {
return false;
}
NationalCacheStandardTileSourceInfo rhs = (NationalCacheStandardTileSourceInfo) obj;
return new EqualsBuilder().append(this.getOutputPath(), rhs.getOutputPath()).append(this.getType(), rhs.getType()).isEquals();
}
完整的扩展示例类如下:
NationalCacheStandardTileSourceInfo.java
package com.supermap.services.tilesource;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import com.supermap.services.components.commontypes.TileType;
import com.supermap.services.util.Tool;
public class NationalCacheStandardTileSourceInfo extends TileSourceInfo {
private static final long serialVersionUID = 1L;
private String outputPath;
public NationalCacheStandardTileSourceInfo() {
super();
}
//实现拷贝构造函数
public NationalCacheStandardTileSourceInfo(NationalCacheStandardTileSourceInfo info) {
super(info);
this.setOutputPath(info.getOutputPath());
}
//获取瓦片存储路径。
public String getOutputPath() {
return outputPath;
}
public void setOutputPath(String outputPath) {
this.outputPath = outputPath;
}
public NationalCacheStandardTileSourceInfo outputPath(String outputPath) {
this.setOutputPath(outputPath);
return this;
}
public int hashCode() {
HashCodeBuilder builder = new HashCodeBuilder(120000039, 120000041);
String outputPath = getOutputPath();
if (outputPath != null) {
builder.append(Tool.getUniqueAbsoluteFilePath(outputPath));
}
if (getType() != null) {
builder.append(getType());
}
return builder.toHashCode();
}
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (obj == this) {
return true;
}
if (!(obj instanceof NationalCacheStandardTileSourceInfo)) {
return false;
}
NationalCacheStandardTileSourceInfo rhs = (NationalCacheStandardTileSourceInfo) obj;
return new EqualsBuilder().append(this.getOutputPath(), rhs.getOutputPath()).append(this.getType(), rhs.getType()).isEquals();
}
@Override
public TileSourceInfo copy() {
return new NationalCacheStandardTileSourceInfo(this);
}
/**
* 指定瓦片格式类型为 Image。
*/
@Override
public TileType[] getSupportedTileTypes() {
return new TileType[] { TileType.Image };
}
/**
* 返回瓦片格式。
*/
public TileSourceType getType() {
return TileSourceType.UserDefined;
}
/**
* 指定瓦片存储类型为 UserDefined,所有扩展的瓦片格式都需要设置为此类型。
*/
public void setType(TileSourceType type) {
if (!(TileSourceType.UserDefined.equals(type))) {
throw new IllegalArgumentException();
}
super.setType(type);
}
}