arcgis 紧凑瓦片解析

这篇具有很好参考价值的文章主要介绍了arcgis 紧凑瓦片解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


arcgis 10.2 的紧凑型瓦片是bundle和bundlx组成的 v1格式

arcgis 10.3的的紧凑瓦片是bundle一个文件 v2格式

网上版本大多是c#的,写了个c++的。直接上代码


  bool pie_datasource_bundle_readTile(const std::string &bundleFilePath, long long offset,
                                        std::unique_ptr<char[]> &byteArray, int &arrayCount) {

        std::ifstream in_stream;
        in_stream.open(bundleFilePath, std::ios::in | std::ios::binary);
        if (in_stream.is_open()) {
            //切片长度 数据
            char data_buffer[4]{0};
            //从文件头,跳过offset字节
            in_stream.seekg(offset, std::ios_base::beg);
            //读取块长度
            if (in_stream.read(data_buffer, sizeof(char) * 4).eof())//如果包含到结尾则返回失败
            {
                in_stream.close();
                return false;
            }
            //数据块长度
            int blobSize = 0;
            blobSize=(int)(data_buffer[0]&0xff)
            +(int)(data_buffer[1]&0xff)*256
            +(int)(data_buffer[2]&0xff)*65536
            +(int)(data_buffer[3]&0xff)*16777216;
            if (blobSize <= 0) {
                in_stream.close();
                return false;
            }
            arrayCount = blobSize;
            byteArray = std::unique_ptr<char[]>(new char[arrayCount]);
            if (in_stream.read(byteArray.get(), arrayCount).eof())//如果包含到结尾则返回失败
            {
                in_stream.close();
                return false;
            }
            in_stream.close();
            return true;
        }
        return false;
    }
bool pie_datasource_bundle_readTileFromBundleV1(const std::string &bundleFilePath, const std::string &bundlxFilePath,
                                                    int index, std::unique_ptr<char[]> &byteArray, int &arrayCount) {
        //索引数据 长度
        char buffer[5]{0};
        std::ifstream in_stream;
        in_stream.open(bundlxFilePath, std::ios::in | std::ios::binary);
        if (in_stream.is_open()) {
            //从文件头,跳过bundlx的前16字节,并移动到index个块的位置,每个块长度为5字节
            in_stream.seekg(16 + 5 * index, std::ios_base::beg);
            //读取块所在偏移量
            if (in_stream.read(buffer, sizeof(char) * 5).eof())//如果包含到结尾则返回失败
            {
                in_stream.close();
                return false;
            }
            in_stream.close();
            long long offset = 0;
            offset=(long long)(buffer[0]&0xff)
            +(long long)(buffer[1]&0xff)*256
            +(long long)(buffer[2]&0xff)*65536
            +(long long)(buffer[3]&0xff)*16777216
            +(long long)(buffer[4]&0xff)*4294967296L;
            return pie_datasource_bundle_readTile(bundleFilePath, offset, byteArray, arrayCount);
        }
        return false;
    }

    bool pie_datasource_bundle_readTileFromBundleV2(const std::string &bundleFilePath, int index,
                                                    std::unique_ptr<char[]> &byteArray, int &arrayCount) {
        //索引数据 长度
        char buffer[4]{0};
        std::ifstream in_stream;
        in_stream.open(bundleFilePath, std::ios::in | std::ios::binary);
        if (in_stream.is_open()) {
            //从文件头,跳过bundle的前64字节,并移动到index个块的位置,每个块长度为8字节
            in_stream.seekg(64 + 8 * index, std::ios_base::beg);
            //读取块所在偏移量
            if (in_stream.read(buffer, sizeof(char) * 4).eof())//如果包含到结尾则返回失败
            {
                in_stream.close();
                return false;
            }
            in_stream.close();
            int offset = 0;
            offset=(int)(buffer[0]&0xff)
            +(int)(buffer[1]&0xff)*256
            +(int)(buffer[2]&0xff)*65536
            +(int)(buffer[3]&0xff)*16777216;//长度偏移量
            auto lengthoffset = offset - 4;
            return pie_datasource_bundle_readTile(bundleFilePath, lengthoffset, byteArray, arrayCount);
        }
        return false;
    }

 



文章来源地址https://www.toymoban.com/news/detail-589937.html

到了这里,关于arcgis 紧凑瓦片解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数学建模中提升目标、变量和约束的紧凑度的几种技巧

    在数学建模中,我们常常会更青睐于紧凑的形式,以下有一些常见的方法来提升目标、约束、变量的范围。 针对问题的特定信息来收紧边界 :尽管求解器常常会有自己的预处理策略,其中包括推导约束的隐藏关系来对变量边界做收紧处理,但这些方法是从模型本身出发进行

    2024年02月04日
    浏览(25)
  • 论文推荐:DCSAU-Net,更深更紧凑注意力U-Net

    这是一篇23年发布的新论文,论文提出了一种更深、更紧凑的分裂注意力的U-Net,该网络基于主特征守恒和紧凑分裂注意力模块,有效地利用了底层和高层语义信息。 1、架构 DCSAU-Net 的编码器首先使用 PFC 策略从输入图像中提取低级语义信息。 CSA 块应用具有不同卷积数和注意

    2023年04月13日
    浏览(24)
  • WebGIS瓦片地图添加水印(矢量瓦片、栅格瓦片)

       水印 能为收到版权信息产品归属提供有力的证据, 并能够监视被保护数据的传播, 真伪鉴别以及非法拷贝控制等.在现今流行的线上地图同样需要水印技术, 保护地图数据.本文将介绍如何实现瓦片地图水印添加, 包括栅格瓦片、矢量瓦片.   在探索过程中, 参考了《前端水

    2024年02月08日
    浏览(36)
  • Bootstrap——表格(基本实例、表头选项、条纹状表格、带边框的表格、无边框的表格、鼠标指针悬停、紧凑表格、状态类、响应式表格)

           在网页制作中,通常会用到表格的鼠标悬停、隔行变色等功能。Bootstrap中提供了一系列表格布局样式,利用该样式可以帮助开发者快速开发出美观的表格,作用于table元素的表格样式如下表所示。 上表中,.table是表格的一个基类,如果想要加其他的样式,都要在.tab

    2024年02月11日
    浏览(25)
  • 【Unity 学习笔记】规则瓦片和动态瓦片的应用

            上一篇笔记记录了瓦片调色板的应用,瓦片调色板常用于游戏场景的绘制,可以完全按照作者的想法绘制地图,自由度大。但是瓦片调色板也有其缺点,就是需要人一点一点地绘制。在这片笔记中,我将介绍两种新添加的瓦片,即规则瓦片和动态瓦片,有了这两类

    2024年02月10日
    浏览(26)
  • Web地图服务规范之栅格瓦片地图服务:WMTS(WebMapTileService,网络地图瓦片服务)、TMS(TileMapService,瓦片地图服务)和XYZ

    这四种地图服务都是通过网络传输的栅格瓦片地图服务,这里有三个名词需要解释: 遥感影像、Dem等,就是图片。 实际上,地图服务就是一个url,且这个url满足一定条件:基于这个url拼上固定参数或路由地址可以获取地图服务的元数据信息(返回结果是xml或者json);也能获得

    2024年02月21日
    浏览(34)
  • PostGIS 矢量瓦片

    title: PostGIS 矢量瓦片 date: 2023-08-07 author: ac tags: vector tile categories: Database Martin - 基于PostGIS的矢量瓦片服务器 1. 简介 目前流行的矢量瓦片的切图方案: mapbox gl + tippecanoe :v2收费,tippecanoe是mapbox官方推荐的矢量瓦片静态生成工具 ,适用于大数据量场景,且不频繁更新的空间数

    2024年02月13日
    浏览(29)
  • Unity学习:瓦片地图

    目录 一、tilemap  二、rule tiles  三、rule override tile  四、advanced override tile 五、伪透视图 这里首先给出unity的官方文档: https://docs.unity3d.com/Manual/class-Tilemap.html https://docs.unity3d.com/Manual/class-Tilemap.html 创建    创建完之后是这个 拖入图片,将贴图类型设置为精灵   关于瓦片像

    2024年02月05日
    浏览(40)
  • Tilemap瓦片地图

    可以用Tilemap工具来构建游戏世界的地图,创建瓦片地图时, Grid组件自动作为瓦片地图的父级 ,相比于传统使用照片搭建地图的方式,使用瓦片地图用来搭建地图可以更加迅速,而且使用传统方式搭建地图时,需要添加大量的碰撞体,但是使用瓦片地图就可以避免该问题 瓦片

    2024年02月10日
    浏览(53)
  • Leaflet 调用百度瓦片地图服务

    在使用 leaflet 调用第三方瓦片地图服务的项目,主要谷歌地图、高德地图、百度地图和 OSM 地图,与其他三种地图对比,百度地图的瓦片组织方式是不同的。百度从中心点经纬度(0,0)度开始计算瓦片,而谷歌地图是从左上角经纬度(-180,90)度开始计算瓦片;如果直接使用百度瓦片

    2024年02月08日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包