当前位置:首页 >> 硬件技术 >> 【SAS Planet 下载地图瓦片-读取】,LG kf690

【SAS Planet 下载地图瓦片-读取】,LG kf690

cpugpu芯片开发光刻机 硬件技术 2
文件名:【SAS Planet 下载地图瓦片-读取】,LG kf690 【SAS Planet 下载地图瓦片-读取】

   SAS Planet下载地图瓦片请看上一篇 详细介绍了下载方法

 【SAS Planet 下载地图瓦片】-CSDN博客

准备工作:

1.提前下载好地图瓦片数据

 SAS Planet下载地图瓦片默认存储路径如下

   默认存储格式为 .sqlitedb

2.提前准备好 java开发环境和开发工具,新建 一个 spring boot 工程,集成 maven。

 在pom.xml 下新增sqlite3驱动包配置,然后更新工程 maven

<!-- sqlite3驱动包 --><dependency><groupId>org.xerial</groupId><artifactId>sqlite-jdbc</artifactId><version>3.32.3.2</version></dependency>

  读取SAS Planet下载的地图瓦片后台代码如下:

package com.api.controller;import io.swagger.annotations.Api;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.http.HttpHeaders;import org.springframework.http.MediaType;import org.springframework.http.ResponseEntity;import org.springframework.web.bind.annotation.CrossOrigin;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RestController;import java.io.BufferedInputStream;import java.io.IOException;import java.sql.*;import java.util.HashMap;import java.util.List;import java.util.Map;@Api(value="读取sqlite文件瓦片",tags={"读取sqlite文件瓦片"})@CrossOrigin // 允许跨域访问@RestControllerpublic class sqliteTilesController {@GetMapping(value = "/getCacheTiles/{layerName}/{level}/{x}/{y}")public ResponseEntity<byte[]> getCacheTiles(@PathVariable("layerName")String layerName, @PathVariable("level")Integer level, @PathVariable("x")Integer x, @PathVariable("y")Integer y) {ResponseEntity<byte[]> response=null;Statement stmt = null;Connection conn = null;try {//String path="E:\\WJ_Data\\SAS.Planet.Release.200606\\cache_sqlite\\Google_Sat_RU_SD\\"+layerName+"\\z"+level+"\\0\\0\\0.0.sqlitedb";String basePath="E:\\WJ_Data\\SAS.Planet.Release.200606\\cache_sqlite\\";//地图下载(SAS.Planet) 下载的瓦片存储在sqlitedb文件里 路径规则 规则计算// 将十进制数转换为二进制字符串再右移后还原成十进制数Integer shrX1= shrnNumberValue(x,10);//Integer shrY1= shrnNumberValue(y,10);//Integer shrX2= shrnNumberValue(x,8);//Integer shrY2= shrnNumberValue(y,8);//String fullPath=basePath+layerName+"\\z"+level+"\\"+shrX1+"\\"+shrY1+"\\"+shrX2+"."+shrY2+".sqlitedb";//jdbc urlString urlStr="jdbc:sqlite:"+fullPath;conn = DriverManager.getConnection(urlStr);conn.setAutoCommit(false);System.out.println("Opened database successfully");stmt = conn.createStatement();//ResultSet rs = stmt.executeQuery( "SELECT * FROM 't'" );String sqlStr="SELECT * FROM 't' where x="+x+" and y="+y;//"SELECT * FROM 't'ResultSet rs = stmt.executeQuery(sqlStr);while ( rs.next() ) {int tilesX = rs.getInt("x");int tilesY = rs.getInt("y");int v= rs.getInt("v");String c= rs.getString("c");long h= rs.getLong("h");long d= rs.getLong("d");String Str="瓦片信息 level:"+level+", x:"+x+", y="+y;System.out.println( Str );//获取图片,图片列的索引为8byte[] bytes = (byte[] )rs.getObject(8);response= ResponseEntity.ok().contentType(MediaType.parseMediaType("image/jpg")).body(bytes);}rs.close();stmt.close();conn.close();} catch ( Exception e ) {System.err.println( e.getClass().getName() + ": " + e.getMessage() );}System.out.println("Operation done successfully");return response;}//将十进制数转换为二进制字符串再右移后还原成十进制数public int shrnNumberValue(int value,int shr) {// value 十进制数// shr 将一个数在二进制上右位移位数String binary = Integer.toString(value, 2); // 十进制转换为二进制字符串int length= binary.length();if(length>shr){String newBinary=binary.substring(0,binary.length()-shr);int decimal = Integer.parseInt(newBinary, 2); // 二进制字符串解析为十进制数return decimal;}else{return 0;}}}

 获取瓦片接口:"http://localhost:2022/getCacheTiles/Google_Sat_RU_SD/{z}/{x}/{y}"

  前端页面调用代码如下

<html lang="en">   <head>     <meta charset="utf-8" />     <meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no" />     <title>Custom LERC Layer | Sample | ArcGIS Maps SDK for JavaScript 4.28</title>     <link rel="stylesheet" href="https://js.arcgis.com/4.28/esri/themes/light/main.css" />

    <style>       html,       body,       #viewDiv {         padding: 0;         margin: 0;         height: 100%;         width: 100%;       }     </style>

    <script>       var dojoConfig = {         paths: {           // see https://github.com/Esri/lerc           lerc: "https://cdn.jsdelivr.net/gh/Esri/lerc@b0650ff915a05b2a045641235323d59b26a40550/OtherLanguages/js/"         }       };     </script>

    <script src="https://js.arcgis.com/4.28/"></script>     <script>       require([         "esri/Map",         "esri/views/MapView",         "esri/layers/BaseTileLayer",         "esri/request",         "lerc/LercDecode"       ], (Map, MapView, BaseTileLayer, esriRequest, LercDecode) => {                 const LercLayer = BaseTileLayer.createSubclass({                   properties: {             urlTemplate: null,             minElevation: 0,             maxElevation: 4000           },

          // Generates the URL to an image to be requested from the server           getTileUrl: function(level, row, col) {             return this.urlTemplate               .replace("{z}", level)               .replace("{x}", col)               .replace("{y}", row);           },

          // fetch tiles visible in the view           fetchTile: function(level, row, col, options) {             const url = this.getTileUrl(level, row, col);

            // requested encoded elevation information             // the signal option ensures that obsolete requests are aborted             return esriRequest(url, {               responseType: "array-buffer",               signal: options && options.signal             }).then((response) => {                 // create a canvas to draw the processed image                 const canvas = document.createElement("canvas");                 const context = canvas.getContext("2d");                 const width = this.tileInfo.size[0];                 const height = this.tileInfo.size[1];

                canvas.width = width;                 canvas.height = height;                 const lerc = LercDecode.decode(response.data, { noDataValue: 0 });

                               const pixels = lerc.pixels[0];                 const stats = lerc.statistics[0];

                const min = this.minElevation;                 const max = this.maxElevation;                 const noDataValue = stats.noDataValue;                 const imageData = context.createImageData(width, height);                                  const data = imageData.data;                 const factor = 256 / (max - min);                 let value = 0;                 let j;

                             for (let i = 0; i < width * height; i++) {                           j = i + Math.floor(i / width);                                   value = (pixels[j] - min) * factor;                   data[i * 4] = value; // r                   data[i * 4 + 1] = value; // g                   data[i * 4 + 2] = 0; // b                   data[i * 4 + 3] = pixels[i] === noDataValue ? 0 : value; // a                 }                 context.putImageData(imageData, 0, 0);

                return canvas;               }             );           }         });                  var  vUrl="http://localhost:2022/getCacheTiles/Google_Sat_RU_SD/{z}/{x}/{y}";         const lercLayer = new LercLayer({           urlTemplate:vUrl,           title: "Google_Sat_RU_SD"         });

        const map = new Map({           basemap: "dark-gray-vector",           layers: [lercLayer]         });

        const view = new MapView({           container: "viewDiv",           map: map           zoom: 5         });       });     </script>   </head>

  <body>     <div id="viewDiv"></div>   </body> </html>

效果如下

   

协助本站SEO优化一下,谢谢!
关键词不能为空
同类推荐
«    2025年12月    »
1234567
891011121314
15161718192021
22232425262728
293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
文章归档
网站收藏
友情链接