全国高清卫星影像(Google Earth)无偏移地图(19级)免费送了

您所在的位置:网站首页 卫星地图高清免费下载手机版谷歌地图 全国高清卫星影像(Google Earth)无偏移地图(19级)免费送了

全国高清卫星影像(Google Earth)无偏移地图(19级)免费送了

2023-11-03 19:27| 来源: 网络整理| 查看: 265

自从Google Earth 无法访问后,作为开发者的我感同身受,非常理解那么同行们的感受。

好在我已经下载了全国的地图数据,抱着一颗数据来源于网络服务于网络的心态,我把

我手上的全国Google Earth 19级数据免费的开放给大家,旨在能尽一点绵薄之力,避免

被那些不法之徒用来获取暴利。

 

数据我已经上传到百度云盘:目前已经把全国33个省、直辖市、特别行政区数据已经完全

传到网盘,总量约10T左右。

需要的朋友,可以通过微信搜索“JingWeiKuaiTu”微信号,获取地图。

 

当然如果有朋友特别急着用,也可以通过邮寄硬盘给到我这边,我会把全国的数据一并copy到硬盘

在回寄回去。

 

关于文件格式

 

通常我们在工作中下载谷歌卫星影像数据时,轻则几百M,重则几百个G甚至上TB级。影像数据太大,是大家经常会遇到的一个问题,

尤其是向下载一个省以上数据的时候该问题尤为突出。那么该问题是否有一个比较好的解决方案呢?

以全球为例,我们以19级为例,共有2^18 * 2^17 张瓦片,如此多的瓦片会让磁盘愈来愈慢,同时也无法维护。花费时间越来越长,最后不了了之。

当影像下载范围比较大时,我们可以采用金字塔分块下载的方式进行下载,系统会自动将大范围分成若干个块,且块与块之间是可以无缝拼接的。

 

一般情况我们选择全球前10级别作为基础级别,因数据量不大(越1G)左右,后续以10级作为基础级别,

全球19级别数据被划分为 2^8 * 2^7(512 * 256)个块。每个块中包含了512 * 256 张小瓦片。

采用高效的索引方式进行存储,全球前10级别的数据存储成一个文件(.fepk),11-19级别存储为n个文件。

例如全球第10级一共有 512 * 256 张瓦片(从第0级别开始计算),那么全球11-19级别会有512 * 256 个文件(.fepk)

 

文件格式开放

作为开发者深知每一家的地图格式都不尽相同,都有自己的规则,我这里把文件的存储格式开发给大家,起到抛砖引玉的左右

期待有更好的存储格式出现,共同提升国内GIS水平。

 

1  FEPK文件格式说明

我们一般不会直接采用瓦片作为管理单元,会把一个块作为管理单元,把数据划分为索引文件与数据文件,如下所示:

数据文件:world.fepk

索引文件:world.fepk.idx

 

1.1  索引文件  

表 1字段说明

文件头

字段

文件头

char    szMagic[20]

fe.tile.store.data20字节

uint    version

版本号4字节

uint    typeId

数据类型

enumPKType

{

 PK_IMAGE ,

 PK_DEM,

 PK_VEC,

PK_QXSY,

PK_USER,

};4字节

uint    wgs84

是否是wgs84经纬投影4字节

uint    flag

4字节

uint64  timestamp

时间戳8字节

real2   vStart

经纬度最小范围8*2字节

real2   vEnd

经纬度最大范围 8*2字节

LevSnaplevOff[24]

级别索引,8 * 24 字节

char    _reserve[240]

保留

级别1

int2    _start

2 * 4字节,瓦片最小行列号

int2    _end

2 * 4字节,瓦片最大行列号

uint64  _offset

8字节

uint64  _dataSize

8字节

uint    _lev

4字节

char    _reserve[216]

216字节

瓦片数据索引矩阵数据PKTLHeader

N * PKTLHeader

N = (_end.x - _start.x + 1) * (_end.y - _start.y + 1)

 

PKTLHeader

 

级别2

 

 

级别3

 

 

级别…

 

 

 

PKTLHeader定义:

struct  PKTLHeader

    {

        /// 有无数据标记,即服务器上是否有该数据 0,无,1,有

        uint64  _data:2;

        /// 在本文件中是否已经存储 0,无,1,有

        uint64  _stored:2;

        /// 状态,

        uint64  _state :6;

        /// 数据地址,使用50个bit最大 2^54

        /// 单个文件最大16 K T

        uint64  _offset : 54;

        /// 如果该值!= 0xFFFF,则有效,否则无效,

        /// 使用该字段的意义在于解决网络读取问题,比如在云盘上

        /// 先读取索引,如果没有数据大小,或者数据大小存储在数据文件中,则需要

        /// 再次访问数据文件,才可以得大小,增加额外的IO,同时兼顾大小,该变量最大可以存储64K

        /// 如果超过了64K,那么一样的需要访问数据文件获取大小

   ushort  _dataSize;

};

共计10自字节

LevSnap定义:

struct  LevSnap

    {

        uint64  _lev:8;

        uint64  _offset:56;

};

共计8字节

1.2  数据文件文件

文件头

字段

文件头

char    szMagic[20]

fe.tile.store.data20字节

uint    version

版本号4字节

uint    typeId

数据类型

enumPKType

{

 PK_IMAGE ,

 PK_DEM,

 PK_VEC,

PK_QXSY,

PK_USER,

};4字节

uint    wgs84

是否是wgs84经纬投影4字节

uint    flag

4字节

uint64  timestamp

时间戳8字节

real2   vStart

经纬度最小范围8*2字节

real2   vEnd

经纬度最大范围 8*2字节

LevSnaplevOff[24]

级别索引,8 * 24 字节

char    _reserve[240]

保留

数据0

Int4

4*4字节,行号,列号,级别,大小

数据

 

数据1

Int4

4*4字节,行号,列号,级别,大小

数据

 

数据…

Int4

4*4字节,行号,列号,级别,大小

数据

 

 

1.3 访问SDK

      为了方便大家使用数据,提供了C语言版本的SDK(x86/x64)两个版本

#pragma once typedef void* FEPKFile; #pragma pack (push,1) /// 该文件不可以被修改 typedef unsigned short ushort; typedef unsigned int uint; typedef unsigned __int64 uint64; struct FEPHHeader { /// 有无数据标记,即服务器上是否有该数据 0,无,1,有 uint64 _data : 2; /// 在本文件中是否已经存储 0,无,1,有 uint64 _stored : 2; /// 状态, uint64 _state : 6; /// 数据地址,使用50个bit最大 2^54 /// 单个文件最大16 K T uint64 _offset : 54; /// 如果该值!= 0xFFFF,则有效,否则无效, /// 使用该字段的意义在于解决网络读取问题,比如在云盘上 /// 先读取索引,如果没有数据大小,或者数据大小存储在数据文件中,则需要 /// 再次访问数据文件,才可以得大小,增加额外的IO,同时兼顾大小,该变量最大可以存储64K /// 如果超过了64K,那么一样的需要访问数据文件获取大小 ushort _dataSize; }; #pragma pack(pop) extern "C" { /// /// 打开文件函数,可以打开索引也可以打开数据文件 /// /// 文件名称 /// 0:失败,否则成功 FEPKFile fepkOpenFile(const char* fileName); /// /// 读取索引数据函数 /// /// 索引文件指针 /// 列号 /// 行号 /// 级别 /// 返回文件头信息 /// true:false bool fepkReadHeader(FEPKFile file,int x,int y,int z,FEPHHeader* header); /// /// 根据文件头信息读取文件大小(瓦片数据大小) /// /// 索引文件指针 /// 文件头信息 /// 输出文件大小 /// true:false bool fepkReadDataSize(FEPKFile file,const FEPHHeader* header,uint* pSize); /// /// 读取瓦片数据函数 /// /// 索引文件指针 /// 文件头信息 /// 输入缓冲区大小 /// 缓冲区长度 /// -1:失败,0:无数据,>0 数据的真实大小 int fepkReadData(FEPKFile file,const FEPHHeader* header,void* pBuf,uint nBufLen); /// /// 关闭文件 /// void fepkCloseFile(FEPKFile file); /// /// 导出文件 /// /// 输入缓冲区大小 /// 目标文件夹 bool fepkExport(const char* fileName,const char* dir); /// /// 导出文件 /// /// 输入缓冲区大小 /// 目标文件夹 bool fepkExportWithLevs(const char* fileName, const char* dir,const unsigned* levs,unsigned levSize); } /// /// 使用说明 /// FEPKFile file = fepkOpenFile("x:/xx/yy/abc/world0-8.fepk"); /// if (file == nullptr) /// { /// return; /// } /// FEPHHeader header; /// uint nSize = 0; /// if(!fepkReadHeader(file,0,0,0,&header)) /// { /// return; /// } /// /// if(!fepkReadDataSize(file,&header,&nSize)) /// { /// return; /// } /// char* pBuf = new char[nSize]; /// if(!fepkReadData(file,&header,pBuf,nSize)) /// { /// delete []pBuf; /// } ///

1.4数据解包工具,即将.fepk数据解压成标准的瓦片

  解压工具已经,已经上传到网盘,链接如下: 

  链接:https://pan.baidu.com/s/1vP8QSmiu5GsmtuZwyBQxWA   提取码:6666

  使用方法:  

  G:\tools\tools>FEPKUNPack.exe D:\FE\data\fepk\8-420-95.fepk D:\FE\data\fepk\data

  解压D:\FE\data\fepk\8-420-95.fepk文件中所有数据到data下 

  

      

  解压指定级别数据

  针对已经存在的fpek,追加级别,如果级别已经存在,则不做处理,不存在则追加

命令行如下:

1.     FEPKUNPack.exe y:/yyy.fepk x:/diir 10,11,12

      解压10,11,12三级数据

2.     FEPKUNPack.exe y:/yyy.fepk x:/diir 10-17

      解压10~17级别数据

3.     FEPKUNPack.exe y:/yyy.fepk x:/diir 12

      只解压12级别数据

 

1.5 加压成瓦片会带来很多问题

  1.管理起来发杂,拷贝移动特别慢

    当把一个fepk文件解压成标准的金字塔瓦片后,一个fepk文件中有32万张金字塔瓦片,当需要发布到服务器或者移交给客户的时候特别的慢,因此不建议大家解压成瓦片。

  2.消耗磁盘

    解压成金字塔瓦片后,磁盘空间会变大,笔者亲测,全国的数据解压前6.7T,解压后9.6T

  3.版本维护困难

    无法有效的管理数据的版本。

1.6  一键发布瓦片服务可以在 cesium,arcgis supermap 等中直接使用

  cesium,arcgis supermap,等知名软件都支持http的方式访问金字塔瓦片,所有建议大家使用这种方式,笔者为此也开发了一款服务器程序提供给大家网盘链接如下:

  

     链接:https://pan.baidu.com/s/1nfHSj8ad8-as65SsflnBDw?pwd=6666      提取码:6666

      环境需要:windows下需要安装.netcore6.0运行时库

  1  .net运行时:dotnet-runtime-6.0.10-win-x64.exe

https://download.visualstudio.microsoft.com/download/pr/50336bc7-7fd1-4a12-b5a2-81ce0219edf9/8d862413975808de0d835888e41e49a7/dotnet-runtime-6.0.10-win-x64.exe

  2  .netcore 运行时aspnetcore-runtime-6.0.7-win-x64.exe

https://download.visualstudio.microsoft.com/download/pr/2370bcad-45b1-4ccb-bc61-21ffd7116d63/1aa8efcabfb60ee778b913a5eb237a56/aspnetcore-runtime-6.0.10-win-x64.exe

   3  如果系统报错, 没有证书,那么需要安装..net SDK

   下载SDK

https://download.visualstudio.microsoft.com/download/pr/af52a0a5-09d6-4ac6-9b7e-b22beefa38f5/38796ca6f31d7ac5a4cd3116befa76f9/dotnet-sdk-6.0.305-win-x64.exe

  4  安装完后,控制台执行 dotnet dev-certs https,命令即可

  5  上述安装文件网盘地址:    

     链接:https://pan.baidu.com/s/1jyn0mieHrYB0zhhmgN6k6w        提取码:6666

支持通过http或者https方式访问瓦片数据

服务配置:

字段

dataPath

"D:\\FE\\data\\fepk",

imagePath

"D:\\FE\\data\\def.jpg"

httpPort

"http://*:9000",

httpsPort

"https://*:9001"

 

 

 

文件列表如下:

    

  打开ModelData/Config.json文件,配置dataPath:即当前fepk文件的目录

  也可以自定义配置端口号信息

  配置完成后双击运行service.fepkHttp.vs2022.exe

  画面如下:

   

 

  服务器正常启动。  

     

  可以通过浏览器进行数据验证:

  Htttp:    http://localhost:9000/api/readImage?col=0&row=0&lev=0

  Htttps: https://localhost:9001/api/readImage?col=0&row=0&lev=0  

  

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3