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) 
      • 从类继承的方法 java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • 字段详细资料

      • FIELD_CREATE_TIME

        public static final java.lang.String FIELD_CREATE_TIME
        

        创建时间字段 (新增)

        从以下版本开始:
        7.0.0
    • 构造器详细资料

      • MBTilesUtil

        public MBTilesUtil()
        
    • 方法详细资料

      • 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 - EpsgCode
        tile - 切片
        返回:
      • 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