public final class MBTilesUtil
extends java.lang.Object
MBTiles操作的工具类,封装了常用的MBTiles数据库操作方法
限定符和类型 | 字段和说明 |
---|---|
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) |
public static final java.lang.String FIELD_CREATE_TIME
创建时间字段 (新增)
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)
public static java.lang.String getUTFGridName(java.lang.String mapName, java.lang.String layerName, java.lang.String epsgCode, int tileWidth, int tileHeight, int pixCell)
mapName
- 地图名layerName
- 图层名epsgCode
- 投影信息的EPSG编码tileWidth
- 瓦片像素宽度tileHeight
- 瓦片像素高度public static java.lang.String getResolutionString(double resolution)
resolution
- 分辨率public static java.lang.Boolean isResolutionEquals(double resolution1, double resolution2)
public static void createTables(java.sql.Connection conn, boolean isCompatiableForMBTilesSpec)
conn
-isCompatiableForMBTilesSpec
- 是否符合MBTiles1.1规范public static boolean updateTable(java.sql.Connection conn)
public static void createTables(java.sql.Connection conn)
创建MBTiles相关的数据库表,包括tiles视图、metadata表、map表、images表。【不符合MBTiles1.1规范】。
public static void insertOrUpdateMetadataItem(java.sql.PreparedStatement pst, java.lang.String name, java.lang.String value)
pst
-name
- 元数据名value
- 元数据值public static java.lang.String getMetadata(java.sql.Connection conn, java.lang.String itemName)
获取元数据值。
conn
-itemName
- 元数据名public static ImageTileInfo getTile(java.sql.Connection conn, double resolution, long x, long y, boolean isExistCreateTime)
获取切片
conn
-resolution
- 分辨率x
- 切片列号y
- y 切片行号【数据库实际存储的行号】isExistCreateTime
- 是否存在新增的字段(create_time),兼容MBTilesProviderpublic static ImageTileInfo getTile(java.sql.Connection conn, double resolution, double scaleDenominator, long x, long y, int tileSize, OutputFormat outputFormat, boolean isExistCreateTime)
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)
public static ImageTileInfo getTileByLevel(java.sql.Connection conn, int z, long x, long y, boolean isExistCreateTime)
获取切片
conn
-z
- 切片级别x
- 切片列号y
- 切片行号【数据库实际存储的行号】public static java.util.List<java.lang.Double> getResolutions(java.sql.Connection conn)
得到数据库中的分辨率集合。
conn
-public static boolean tileExists(java.sql.Connection conn, double resolution, long x, long y)
判断SQLite数据库中是否包含指定切片。
resolution
- 分辨率x
- 切片列y
- 切片行public static java.sql.PreparedStatement getPutMapPreparedStatement(java.sql.Connection conn)
conn
-public static java.sql.PreparedStatement getPutImgesPreparedStatement(java.sql.Connection conn, boolean isReplace)
conn
-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
- 切片idpublic static void putImage(java.sql.Connection conn, byte[] data, java.lang.String id)
conn
-data
- 切片数据id
- 切片idpublic static boolean isMBTilesSpec(java.lang.String epsgCode, Point2D origin, double[] resolutionArray)
origin
- 切片原点。resolutionArray
- 分辨率数组。epsgCode
- EpsgCodepublic static boolean isMBTilesSpec(java.lang.String epsgCode, Point2D origin, int tileWidth, int tileHeight, double[] resolutionArray)
origin
- 切片原点。tileWidth
- 切片宽。tileHeight
- 切片高。resolutionArray
- 分辨率数组。epsgCode
- EpsgCodepublic static Point2D getOrigin()
返回标准MBTiles的切片原点。
全球地理范围的左下角。public static boolean isMBTilesSpec(java.lang.String epsgCode, Point2D origin, double resolution)
resolution
-epsgCode
-public static int getLevel(double resolution, java.lang.String epsgCode)
resolution
-epsgCode
-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
- 行号public static double getResolution(int z)
z
- 规范级别public static java.lang.String getTileID(byte[] tiledata, Tile tile)
tiledata
-public static java.lang.String getTileIdByRGB(int rgb, boolean hasAlpha)
@Deprecated public static boolean isDistributedPureImage(byte[] tileData)
tileData
-@Deprecated public static int getRGBFromDistributedPureImage(byte[] tileData)
tileData
-public static byte[] transformPureImageToCommonImageData(byte[] pureData)
pureData
-@Deprecated public static PureColorInfo getPureColorInfo(byte[] imageData)
public static byte[] getPureColorImageData(PureColorInfo info)
public static boolean addField(java.sql.Connection conn, java.lang.String tableName, java.lang.String field)
向指定表中增加指定列
conn
-tableName
- 表名field
- 字段名称public static boolean isSpecTile(java.lang.String epsgCode, Tile tile)
epsgCode
- EpsgCodetile
- 切片public static boolean isResolutionEqualsOrNot(double resoution1, double resoution2)
public static boolean isResolutionEqualsOrNot(double resoution1, double resoution2, int exponent)
判断2个分辨率是否相同,如2个分辨率之差在精度10的exponent次方之内,则视为相同
resoution1
-resoution2
-exponent
-