com.supermap.services.tilesource
类 MBTilesUtil
- java.lang.Object
-
- com.supermap.services.tilesource.MBTilesUtil
-
public final class MBTilesUtil extends java.lang.Object
MBTiles操作的工具类,封装了常用的MBTiles数据库操作方法
- 从以下版本开始:
- 7.0.0
-
-
字段概要
字段 限定符和类型 字段和说明 static java.lang.String
FIELD_CREATE_TIME
创建时间字段 (新增)
-
构造器概要
构造器 构造器和说明 MBTilesUtil()
-
方法概要
方法 限定符和类型 方法和说明 static boolean
addField(java.sql.Connection conn, java.lang.String tableName, java.lang.String field)
向指定表中增加指定列static void
createTables(java.sql.Connection conn)
创建MBTiles相关的数据库表,包括tiles视图、metadata表、map表、images表。static void
createTables(java.sql.Connection conn, boolean isCompatiableForMBTilesSpec)
创建MBTiles相关的数据库表,包括tiles视图、metadata表、map表、images表。static long
displaceY(long zoom, long y)
把由传统模式下计算出来的y轴索引替换成符合mbtiles规范的索引 MBTiles切片符合TMS规范,投影为WebMercator,其切片原点为(-2.0037508342789244E7,-2.0037508342789244E7),切片方向是右上。static int
getLevel(double resolution, java.lang.String epsgCode)
根据分辨率,epsgcode获取级别,若投影不是3857或分辨率不是MBTiles规范分辨率返回-1。static java.lang.String
getMbtilesNameFromMetadata(java.lang.String mapName, java.lang.String mapStatusHashCode, int tileWidth, int tileHeight, java.lang.String tileFormatName, boolean transparent, boolean createStandardFile)
根据MetaData来获得MBtiles的名字static java.lang.String
getMetadata(java.sql.Connection conn, java.lang.String itemName)
获取元数据值。static Point2D
getOrigin()
返回标准MBTiles的切片原点。static byte[]
getPureColorImageData(PureColorInfo info)
static PureColorInfo
getPureColorInfo(byte[] imageData)
已过时。static java.sql.PreparedStatement
getPutImgesPreparedStatement(java.sql.Connection conn, boolean isReplace)
得到插入切片数据的预编译Sql语句。static java.sql.PreparedStatement
getPutMapPreparedStatement(java.sql.Connection conn)
得到插入切片映射的预编译Sql语句。static double
getResolution(int z)
根据符合MBTiles1.1规范的级别获取对应的分辨率static java.util.List<java.lang.Double>
getResolutions(java.sql.Connection conn)
得到数据库中的分辨率集合。static java.lang.String
getResolutionString(double resolution)
把resolution转成一个被截断的字符串static int
getRGBFromDistributedPureImage(byte[] tileData)
已过时。static ImageTileInfo
getTile(java.sql.Connection conn, double resolution, double scaleDenominator, long x, long y, int tileSize, OutputFormat outputFormat, boolean isExistCreateTime)
static ImageTileInfo
getTile(java.sql.Connection conn, double resolution, long x, long y, boolean isExistCreateTime)
获取切片static ImageTileInfo
getTileByLevel(java.sql.Connection conn, int z, long x, long y, boolean isExistCreateTime)
获取切片static java.lang.String
getTileID(byte[] tiledata, Tile tile)
获取切片对应的切片id(若切片为单色图片tile_id为图片RGB值的16进制值组合而成,比如红色图片tile_id为”ff0000”,其他非单色图片tile_id为xyz(resolution)的拼串)static java.lang.String
getTileIdByRGB(int rgb, boolean hasAlpha)
static java.lang.String
getUTFGridName(java.lang.String mapName, java.lang.String layerName, java.lang.String epsgCode, int tileWidth, int tileHeight, int pixCell)
根据MetaData来获得UTFGrid缓存的名字。static void
insertOrUpdateMetadataItem(java.sql.PreparedStatement pst, java.lang.String name, java.lang.String value)
插入或更新元数据信息static boolean
isDistributedPureImage(byte[] tileData)
已过时。static boolean
isMBTilesSpec(java.lang.String epsgCode, Point2D origin, double resolution)
判断是否为MBTiles规范。static boolean
isMBTilesSpec(java.lang.String epsgCode, Point2D origin, double[] resolutionArray)
判断是否为MBTiles规范static boolean
isMBTilesSpec(java.lang.String epsgCode, Point2D origin, int tileWidth, int tileHeight, double[] resolutionArray)
判断是否为MBTiles规范static java.lang.Boolean
isResolutionEquals(double resolution1, double resolution2)
static boolean
isResolutionEqualsOrNot(double resoution1, double resoution2)
static boolean
isResolutionEqualsOrNot(double resoution1, double resoution2, int exponent)
判断2个分辨率是否相同,如2个分辨率之差在精度10的exponent次方之内,则视为相同static boolean
isSpecTile(java.lang.String epsgCode, Tile tile)
判断是否是规范的切片。static void
putImage(java.sql.Connection conn, byte[] data, java.lang.String id)
向数据中插入一个切片数据【该方法不会自动提交数据库事务】。static void
putTile(java.sql.Connection conn, java.sql.PreparedStatement st, double resolution, long zoomlevel, long x, long y, java.lang.String id)
向数据中插入一个切片索引【该方法不会自动提交数据库事务】。static java.util.List<java.lang.String>
selectTileID(java.sql.Connection conn, java.lang.String resolution, long minx, long maxx, long miny, long maxy)
static boolean
tileExists(java.sql.Connection conn, double resolution, long x, long y)
判断SQLite数据库中是否包含指定切片。static byte[]
transformPureImageToCommonImageData(byte[] pureData)
把分布式缓存生成的纯色图片数据转成正常的图片数据。static boolean
updateTable(java.sql.Connection conn)
-
-
-
字段详细资料
-
FIELD_CREATE_TIME
public static final java.lang.String FIELD_CREATE_TIME
创建时间字段 (新增)
- 从以下版本开始:
- 7.0.0
-
-
方法详细资料
-
getMbtilesNameFromMetadata
public static java.lang.String getMbtilesNameFromMetadata(java.lang.String mapName, java.lang.String mapStatusHashCode, int tileWidth, int tileHeight, java.lang.String tileFormatName, boolean transparent, boolean createStandardFile)
根据MetaData来获得MBtiles的名字- 返回:
-
getUTFGridName
public static java.lang.String getUTFGridName(java.lang.String mapName, java.lang.String layerName, java.lang.String epsgCode, int tileWidth, int tileHeight, int pixCell)
根据MetaData来获得UTFGrid缓存的名字。- 参数:
mapName
- 地图名layerName
- 图层名epsgCode
- 投影信息的EPSG编码tileWidth
- 瓦片像素宽度tileHeight
- 瓦片像素高度- 返回:
- UTFGrid缓存的名字。
-
getResolutionString
public static java.lang.String getResolutionString(double resolution)
把resolution转成一个被截断的字符串- 参数:
resolution
- 分辨率- 返回:
-
isResolutionEquals
public static java.lang.Boolean isResolutionEquals(double resolution1, double resolution2)
-
createTables
public static void createTables(java.sql.Connection conn, boolean isCompatiableForMBTilesSpec)
创建MBTiles相关的数据库表,包括tiles视图、metadata表、map表、images表。- 参数:
conn
-isCompatiableForMBTilesSpec
- 是否符合MBTiles1.1规范
-
updateTable
public static boolean updateTable(java.sql.Connection conn)
-
createTables
public static void createTables(java.sql.Connection conn)
创建MBTiles相关的数据库表,包括tiles视图、metadata表、map表、images表。【不符合MBTiles1.1规范】。
-
insertOrUpdateMetadataItem
public static void insertOrUpdateMetadataItem(java.sql.PreparedStatement pst, java.lang.String name, java.lang.String value)
插入或更新元数据信息- 参数:
pst
-name
- 元数据名value
- 元数据值
-
getMetadata
public static java.lang.String getMetadata(java.sql.Connection conn, java.lang.String itemName)
获取元数据值。
- 参数:
conn
-itemName
- 元数据名- 返回:
-
getTile
public static ImageTileInfo getTile(java.sql.Connection conn, double resolution, long x, long y, boolean isExistCreateTime)
获取切片
- 参数:
conn
-resolution
- 分辨率x
- 切片列号y
- y 切片行号【数据库实际存储的行号】isExistCreateTime
- 是否存在新增的字段(create_time),兼容MBTilesProvider- 返回:
-
getTile
public static ImageTileInfo getTile(java.sql.Connection conn, double resolution, double scaleDenominator, long x, long y, int tileSize, OutputFormat outputFormat, boolean isExistCreateTime)
-
selectTileID
public static java.util.List<java.lang.String> selectTileID(java.sql.Connection conn, java.lang.String resolution, long minx, long maxx, long miny, long maxy)
-
getTileByLevel
public static ImageTileInfo getTileByLevel(java.sql.Connection conn, int z, long x, long y, boolean isExistCreateTime)
获取切片
- 参数:
conn
-z
- 切片级别x
- 切片列号y
- 切片行号【数据库实际存储的行号】- 返回:
-
getResolutions
public static java.util.List<java.lang.Double> getResolutions(java.sql.Connection conn)
得到数据库中的分辨率集合。
- 参数:
conn
-- 返回:
-
tileExists
public static boolean tileExists(java.sql.Connection conn, double resolution, long x, long y)
判断SQLite数据库中是否包含指定切片。
- 参数:
resolution
- 分辨率x
- 切片列y
- 切片行- 返回:
-
getPutMapPreparedStatement
public static java.sql.PreparedStatement getPutMapPreparedStatement(java.sql.Connection conn)
得到插入切片映射的预编译Sql语句。- 参数:
conn
-- 返回:
- 预编译Sql语句【用完后需要显式关闭】
-
getPutImgesPreparedStatement
public static java.sql.PreparedStatement getPutImgesPreparedStatement(java.sql.Connection conn, boolean isReplace)
得到插入切片数据的预编译Sql语句。- 参数:
conn
-- 返回:
- 预编译Sql语句【用完后需要显式关闭】
-
putTile
public static void putTile(java.sql.Connection conn, java.sql.PreparedStatement st, double resolution, long zoomlevel, long x, long y, java.lang.String id)
向数据中插入一个切片索引【该方法不会自动提交数据库事务】。- 参数:
conn
-resolution
- 切片分辨率zoomlevel
- 切片级别x
- 切片列号y
- 切片行号id
- 切片id
-
putImage
public static void putImage(java.sql.Connection conn, byte[] data, java.lang.String id)
向数据中插入一个切片数据【该方法不会自动提交数据库事务】。- 参数:
conn
-data
- 切片数据id
- 切片id
-
isMBTilesSpec
public static boolean isMBTilesSpec(java.lang.String epsgCode, Point2D origin, double[] resolutionArray)
判断是否为MBTiles规范- 参数:
origin
- 切片原点。resolutionArray
- 分辨率数组。epsgCode
- EpsgCode- 返回:
-
isMBTilesSpec
public static boolean isMBTilesSpec(java.lang.String epsgCode, Point2D origin, int tileWidth, int tileHeight, double[] resolutionArray)
判断是否为MBTiles规范- 参数:
origin
- 切片原点。tileWidth
- 切片宽。tileHeight
- 切片高。resolutionArray
- 分辨率数组。epsgCode
- EpsgCode- 返回:
-
getOrigin
public static Point2D getOrigin()
返回标准MBTiles的切片原点。
全球地理范围的左下角。- 返回:
- 标准MBTiles的切片原点。
- 从以下版本开始:
- 7.0.1
-
isMBTilesSpec
public static boolean isMBTilesSpec(java.lang.String epsgCode, Point2D origin, double resolution)
判断是否为MBTiles规范。- 参数:
resolution
-epsgCode
-- 返回:
-
getLevel
public static int getLevel(double resolution, java.lang.String epsgCode)
根据分辨率,epsgcode获取级别,若投影不是3857或分辨率不是MBTiles规范分辨率返回-1。- 参数:
resolution
-epsgCode
-- 返回:
-
displaceY
public static long displaceY(long zoom, long y)
把由传统模式下计算出来的y轴索引替换成符合mbtiles规范的索引
MBTiles切片符合TMS规范,投影为WebMercator,其切片原点为(-2.0037508342789244E7,-2.0037508342789244E7),切片方向是右上。
而传统模式下(比如iServer 分布式切图,瓦片请求等)都是右下。 当采用传统模式切出来的瓦片,如果需要保存在mbtiles文件中,需要对Y方向上的索引进行变换。 计算公式推算如下:假如有一个瓦片,其块宽为w ,其左上角Y轴坐标为 y,采用传统的模式,计算出的Y轴索引为k ,那么k=(-2.0037508342789244E7-y)/w
现在需要计算符合mbtiles规范的Y轴索引m,并且m=(y-w+2.0037508342789244E7/w 。根据上述两个公式,可推出:m=-(y+1) </ p>- 参数:
zoom
- 级别y
- 行号- 返回:
-
getResolution
public static double getResolution(int z)
根据符合MBTiles1.1规范的级别获取对应的分辨率- 参数:
z
- 规范级别- 返回:
- 分辨率
-
getTileID
public static java.lang.String getTileID(byte[] tiledata, Tile tile)
获取切片对应的切片id(若切片为单色图片tile_id为图片RGB值的16进制值组合而成,比如红色图片tile_id为”ff0000”,其他非单色图片tile_id为xyz(resolution)的拼串)- 参数:
tiledata
-- 返回:
-
getTileIdByRGB
public static java.lang.String getTileIdByRGB(int rgb, boolean hasAlpha)
-
isDistributedPureImage
@Deprecated public static boolean isDistributedPureImage(byte[] tileData)
已过时。判断tileData是否是通过分布式缓存生成的纯色瓦片。- 参数:
tileData
-- 返回:
-
getRGBFromDistributedPureImage
@Deprecated public static int getRGBFromDistributedPureImage(byte[] tileData)
已过时。从分布式缓存生成的纯色图片数据中获取rgc色。- 参数:
tileData
-- 返回:
-
transformPureImageToCommonImageData
public static byte[] transformPureImageToCommonImageData(byte[] pureData)
把分布式缓存生成的纯色图片数据转成正常的图片数据。- 参数:
pureData
-- 返回:
-
getPureColorInfo
@Deprecated public static PureColorInfo getPureColorInfo(byte[] imageData)
已过时。
-
getPureColorImageData
public static byte[] getPureColorImageData(PureColorInfo info)
-
addField
public static boolean addField(java.sql.Connection conn, java.lang.String tableName, java.lang.String field)
向指定表中增加指定列
- 参数:
conn
-tableName
- 表名field
- 字段名称- 返回:
- 是否添加, 如果已存在, 则不添加, 返回false
- 从以下版本开始:
- 7.0.0
-
isSpecTile
public static boolean isSpecTile(java.lang.String epsgCode, Tile tile)
判断是否是规范的切片。- 参数:
epsgCode
- EpsgCodetile
- 切片- 返回:
-
isResolutionEqualsOrNot
public static boolean isResolutionEqualsOrNot(double resoution1, double resoution2)
-
isResolutionEqualsOrNot
public static boolean isResolutionEqualsOrNot(double resoution1, double resoution2, int exponent)
判断2个分辨率是否相同,如2个分辨率之差在精度10的exponent次方之内,则视为相同
- 参数:
resoution1
-resoution2
-exponent
-- 返回:
- 从以下版本开始:
- 9.1.0
-
-