目标:知道图片经纬度的前提下,将一张图片切割成瓦片图,并以地图底图的格式生成及保存。

技术:leaflet.js+nw.js

下载地址:https://download.csdn.net/download/striveye/11010965

总结:该方法用于单独快速将图片切割成瓦片图,并生成地图格式的图片,可用于leaflet地图、mapbox地图等。

PS:项目必须依赖leaflet.js,nw.js用于快速生成及保存瓦片图(不是必须依赖项,可自行编写保存图片的方法代替)

(目标图片)

(结果图片)

项目文件:

代码实现:

<body style="overflow:scroll">
<div style="background-color: black;text-align:center;overflow:auto;"><canvas id="canvas1" style="border:1px solid blue;">Your browser dosen't support canvas.</canvas>
</div>
<script type="text/javascript" src="./leaflet.js"></script>
<script type="text/javascript">var fs = require('fs');var path = require('path');//参数设置://lat1-lng1:右上角经纬度,lat2-lng2:左下角经纬度//z0:最小级别,z1:最大级别var cfg = {lat1: 32.2871,lng1: 106.6113,lat2: 18.0623,lng2: 117.2460,z0: 0,z1: 8}var IMG_H = 'data:image/png;base64,';console.log('start')var spath = "./SouceData/";var files = fs.readdirSync(spath);var idx = 0, cnt = files.length;next();function next(){if (idx < cnt){var imagefile = spath + files[idx];console.log(((idx+1)+'/'+cnt)+' : '+imagefile)SplitImageToMap(cfg, imagefile, function(){idx++;next();});} else {console.log('end');}}function SplitImageToMap(cfg, imagefile, callback) {var c1 = document.getElementById('canvas1');var ctx1 = c1.getContext('2d');var img = new Image();var c2 = document.createElement('canvas')var ctx2 = c2.getContext('2d');var name = imagefile.substr(imagefile.lastIndexOf('/')+1);var listname = name.split('.')[0].split('_');img.src =  imagefile;img.onload = function () {var size = 256;//瓦片图的尺寸for (var z = cfg.z0; z <= cfg.z0 + (cfg.z1 - cfg.z0); z++) {var point1 = L.CRS.EPSG3857.latLngToPoint(L.latLng(cfg.lat1, cfg.lng1), z);var point2 = L.CRS.EPSG3857.latLngToPoint(L.latLng(cfg.lat2, cfg.lng2), z);var x1 = parseInt(point1.x / size);var y1 = parseInt(point1.y / size);var x2 = parseInt(point2.x / size);var y2 = parseInt(point2.y / size);var cw = size * (x2 - x1 + 1), ch = size * (y2 - y1 + 1);c1.width = cw;c1.height = ch;ctx1.drawImage(img, point1.x % size, point1.y % size, point2.x - point1.x, point2.y - point1.y);var xNum = parseInt(cw / size), yNum = parseInt(ch / size);//计算x,y方向有多少个瓦片for (var y = 0; y < yNum; y++) {for (var x = 0; x < xNum; x++) {var targetImageData = ctx1.getImageData(x * size, y * size, size, size);c2.width = size;c2.height = size;ctx2.putImageData(targetImageData, 0, 0, 0, 0, size, size);var filepath = 'TodoData/' + listname + '/' + z + '/' + (y + y1);mkdirsSync(filepath);var filename = filepath + '/' + z + '_' + (y + y1) + '_' + (x + x1) + '.png';fs.writeFileSync(filename, c2.toDataURL('image/png').substr(IMG_H.length), 'base64');}}}if (callback && typeof callback == 'function') callback();}img.onerror = function(){if (callback && typeof callback == 'function') callback();}}// 递归创建目录 同步方法function mkdirsSync(dirname) {if (fs.existsSync(dirname)) {return true;} else {if (mkdirsSync(path.dirname(dirname))) {fs.mkdirSync(dirname);return true;}}}</script>
</body>

运行操作:

把demo文件夹拉扯到nw.exe运行即可

demo\SouceData:源图片

demo\TodoData:瓦片图

运行效果:

如何将图片切割成瓦片图?相关推荐

  1. java tif切割成瓦片_将图片切割成瓦片图-(算法+实现)

    [实例简介] 介绍:https://blog.csdn.net/STRIVEYe/article/details/88388072 [实例截图] [核心代码] 919ed105-5c0c-4f11-a ...

  2. 地图裁剪器,可以将图片裁剪成瓦片数据,主要用途是将高清卫星图像裁剪成瓦片图,可以做离线地图的开发,基于墨卡托坐标

    废话不多说,直接上代码 地图裁剪器,可以将图片裁剪成瓦片数据,主要用途是将高清卫星图像裁剪成瓦片图,可以做离线地图的开发,基于墨卡托坐标 地图裁剪 package com.wwp.utils.map; ...

  3. OprenCV学习之路一:将彩色图片转换成灰度图

    //将一张彩色图片转成灰度图:#include<cv.h> #include<cvaux.h> #include<highgui.h> #include<ml ...

  4. Android中将一个图片切割成多个图片[转]

    有种场景,我们想将一个图片切割成多个图片.比如我们在开发一个拼图的游戏,就首先要对图片进行切割. 以下是封装好的两个类,可以实现图片的切割.仅供参考和学习. 一个是ImagePiece类,此类保存了一 ...

  5. android图片分割点击,Android中图片切割成多个图片的实现方法

    系统手机总是有很多不是很完美的时候,比如逐帧播放图片的时候产生的效果,今天爱站技术频道小编为大家整理了Android中图片切割成多个图片的实现方法,大家一起来了解一下吧! 以下是封装好的两个类,可以实 ...

  6. 如何将夜晚图片转化为白天图片 matlab,教你简单几步将白天图片转换成夜景图_资源库...

    摘要:教你简单几步将白天图片转换成夜景图_资源库 摘要:今天分享一个有趣的教程,教大家利用滤镜和调整图层,简单几步将白天图片变成夜景图,特别实用,还能学到一个鲜为人知的调色功能,看看赶紧练练吧. 原图 ...

  7. 精雕软件怎么把图片转成灰度图_怎么把普通的照片变成浮雕用的灰度图 精雕图 灰度图 浮雕图之间怎么能联系起来使用...

    怎么把普通的照片变成浮雕用的灰度图 用PS啊,里面有这种效果的,若需要帮忙的话,可以加发给我一份啊,尽量帮你哈,呵呵 用 photoshop 把照片变成灰度图,用PS做有很多方法,介绍两种: 方法1: ...

  8. 基于Qt的jpg、png图片批处理成svg图工具

    项目中有一个功能只能识别svg图,但是我们的原始数据都是jpg或者png图片,这就需要将jpg或者png转成svg了.我们有好几G的原始图片需要转成svg,经过考虑,最终决定用Qt来开发这个小工具,简 ...

  9. python 将图片切割成固定大小的图片脚本

    将像素很大的图片切割成固定大小的多张图片,代码如下: import numpy as np import matplotlib import os from PIL import Imagedef i ...

最新文章

  1. 想写点什么留下点念想
  2. 网管网络布线之常用兵器谱
  3. 终端读写命令 -- read write wall
  4. Java中将String格式的标准时间字符串转换为Date格式的方法
  5. write up: web 前女友(SKCTF)
  6. android 无appid分享_App ID 和Bundle ID 有什么不同?ios面试攻克篇(六)
  7. 摇篮善良:仅添加包装用于战争
  8. Raft成员变更的工程实践
  9. 2分钟 Docker 部署 SprinBoot 集成 Flowable 工作流引擎
  10. 自己动手写spring(三) 支持注解方式
  11. python list切片步长
  12. switch 大气层双系统 进入破解系统 及安装nsp nsz 格式教程
  13. python自动选课原理_python实现学生选课系统 面向对象的应用:
  14. 优美段落集锦(高中)——希望能帮助当年的“我们”
  15. iphone 6s耗电问题
  16. 计算机初二说课稿,初二数学说课稿
  17. Python GUI编程之视频解析软件制作
  18. SJTU规划上课路线
  19. 广州市专精特新补贴政策最高可达200万元
  20. 博客推广与论坛推广的优劣比较

热门文章

  1. win10安装net-snmp,vs2019
  2. 软件汉化:关于ZoomIt汉化的两个关键的问题
  3. 西门子KTP/TP 系列触摸屏以太网通讯方法
  4. LVM逻辑卷(创建、修改、删除一条龙服务)
  5. H.266/VVC帧间预测技术学习:几何划分模式(Geometric partitioning mode, GPM)
  6. 初步认识Internet
  7. 修复由于找不到vcruntime140.dll,无法继续执行代码的问题方法【常用运行库】
  8. opencv检测尺寸+部署时踩过的坑
  9. This function does not fully set the dimensions of output port 2 .
  10. MATLAB中cftool使用