背景

地图功能是每个系统必备的功能之一,通常可以使用百度地图和高德地图来实现在线地图展示。

但是将展示的地图下载到本地则是一件有挑战的事情。

运行环境

mac系统

java 1.8

其中标注的坐标原始数据是百度坐标,因此代码中进行了转换。

参考代码

需求

某一天领导找我,说客户提出需要将系统里的在线地图下载到本地浏览。利用搜索引擎,找到一些思路,

前端思路: 在线地图是canvas绘制的,可以将canvas转图片存储到本地。

后端思路: 高德和百度均提供静态地图接口,但是存在尺寸限制、标注限制。因此需要程序自己切割下载,拼接地图。

作为一名java后端开发,当然是选择后端解决方案。

这里先说下我的需求:我需要一份地图,是杭州滨江地区的,地图需要标注一些位置。这些位置超过10个。因此无法直接使用高德地图接口下载。

实现过程

以高德地图为例,

首先请注册高德开发者,申请密钥,如此才可以调用接口

public final static String uurl = "http://restapi.amap.com/v3/staticmap?zoom=16&size=1024*1024&scale=1";// 高德地图api

key = "你的密钥";

解释下这个接口的参数。

zoom 地图的缩放比。

size 地图的尺寸

scale 地图清晰度 1表示非高清。2表示高清。如果设定值为2 则 zoom将自动成为17 size将变成 2048

由于下载高清地图,非常慢,以及内存容易溢出,因此这里修改非高清的参数。

直接想要结果的,可以下载一份代码,自己跑一次

这里先解释下思路:

1、经纬度切割。 先确定你需要下载地图的经纬度范围。需要2个点即可。

地图左上角、地图右下角。

例如这里我的坐标是杭州滨江区。

String top = "120.123754,30.232441";

String end = "120.243745,30.141632";

你需要决定将你的地图切割成多少块。

这里我设定步长是

// 按照0.01为步长,循环计算出所需获得的图片中心位置坐标

int countX = (int) ((ex - sx) / 0.010999);// 如果ex - sx = 0,说明只有一列

int countY = (int) ((sy - ey) / 0.00955);// 如果sy - ey = 0,说明只有一行

其中0.010999 表示 横向的地图中心距离 0.00955 表示竖向的地图中心距离。

这2个值 不能随意修改。和缩放比、清晰度存在关联。

2、下载地图

设定了步长后即可运行程序,下载地图碎片。下载有可能失败,请多次执行,直到数目完整。

3、横向切割图片

下载的地图碎片,多数情况存在重叠部分,因此需要切割。切割的规则是 第一张图片保持完整,从第二张图片开始切割重叠的部分,只保留不重叠的图片。因此需要确定起点是关键。

for (int i = 1, j = 0; i <= allPng; i++) {

System.out.println("正在截取");

if (i == (j * count[1] + 1)) {

cutImage(path + "/getMaps/" + i + ".png", path + "/cuttedMaps/" + i + ".png", 0, 0, 1024, 1024);

j++;

} else {

cutImage(path + "/getMaps/" + i + ".png", path + "/cuttedMaps/" + i + ".png", 1024 - 1024, 0, 1024,

1024);

}

}

上图中的 1024-1024 表示计算切割的起点位置。

这个重叠值如何确定,拿 1.png和2.png 对比确定。在打开ps工具手动数数偏差。 如果你重叠的像素是10 则这里应当是 10

这里因为我给的步长十分精确,重叠为0 因此切割的起点位置从0开始。

3、竖向切割

和横向是同理的。需要人工通过ps确定 重叠的像素是多少.

横向是比较第一张和第二张图片,但是竖向则需要 比较 第一列的第一张和 第二列的第一张图片。

System.out.println("开始对图片进行第二次截取...");

File f1 = new File(path + File.separator+"mergedMaps");

String[] mergedImgs = f1.list();

for (int i = 1; i <= mergedImgs.length; i++) {

if (i != mergedImgs.length) {

cutImage(path + File.separator+"mergedMaps"+File.separator + i + ".png", path + "/cutteddMaps/" + i + ".png", 0, 0,

(count[1] - 1) * 1024 + 1024, 1024);

} else {

cutImage(path + File.separator+"mergedMaps"+File.separator + i + ".png", path + "/cutteddMaps/" + i + ".png", 0, 0,

(count[1] - 1) * 1024 + 1024, 1024);

}

}

4、合成

正确设定步长、横竖的切割起点,即可正确拼接出想要的图片了。

下载图片可能不完整,可以重复多次执行,

以下是程序执行的效果。由于是16的缩放比,所以图是很大的。大小是 28MB

image.png

问题

1、拼接的图片,出现错位?

重叠值错误。请重新设定。

2、图片没有重叠?

步长太大,请重新设定。

3、标注不完整,破碎

这个问题非常常见,本人也卡在这里。主要原因是标注的点,正好处于分割线上,然后分割线存在重叠部分,切割的时候导致标注不完整。

这里解决方案主要是,不断改变步长,确保地图水平恰好无缝可以拼接。也就是0重叠,但是线条吻合。传说中的完美分割,本人采用的就是该方案。

另外一个就是 ,位于标注上的点,坐标进行偏移,确保位于重叠的右侧。这样不会被切割。也需要多次人工尝试。

4、高清版本

高清版本的参数和非高清的差异较大。主要是确保是 高清版本的地图碎片尺寸是固定的 2048

而非高清的是 1024 因此需要注意修改参数。

5、切割和合并提示文件不存在

下载的地图不完整,多次运行程序即可。因为高德的该接口似乎很奇怪,经常会失败。

代码下载

提供2份代码

滨江高清版本

稍后发布,

高德导航java_通过拼接实现高清地图的下载-高德-java实现相关推荐

  1. 图吧地图(V5.0公测版) 高清地图今日公测

    图吧地图(V5.0公测版) 高清地图今日公测 软件简介:图吧官方网站 [http://www.mapbar.com] 图吧-首批甲级电子地图资质+专注地图导航服务的老牌+HTC/LG等大厂认证预装.惊 ...

  2. 自动驾驶高清地图问题的研究

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 地图是构建自动驾驶技术的关键组成部分.与如今广泛用于导航的常规网络 ...

  3. Velodyne收购高清地图公司 将研发更安全的ADAS系统

    据Future Car报道,Velodyne公司周一宣布收购位于旧金山的高清地图创业公司Mapper.ai的知识产权资产,双方将合作开发更安全的ADAS系统. Velodyne公司以其在激光雷达方面的 ...

  4. 高清,图片,ppt,下载

    当你需要制作PPT.海报或者微信公众号图文,以及其他平面设计的时候,通常可能需要一些高清又好看的图片.然而除了百度,你还有其他找图的方式吗?视频中,我们提供了五大常用图片资源下载网站,下文,我列出了十 ...

  5. 高清地图生成技术综述

    过去几年,自动驾驶一直是最受欢迎和最具挑战性的话题之一.在实现完全自动驾驶的道路上,研究人员利用了各种传感器,如激光雷达.摄像头.IMU和GPS,并开发了用于自动驾驶应用的智能算法,如目标检测.目标分 ...

  6. 高清地图(一) - 什么是自动驾驶未来的方向

    https://www.toutiao.com/a6692937835181244942/ 作者:灰谷 来源:IND4汽车人APP 绝大多数整车制造商都认为高清地图是自动驾驶技术实现的最重要一环之一. ...

  7. 使用python实现高清壁纸批量下载

    一.高清壁纸批量下载 1.概述 此代码是使用python多线程批量下载高清壁纸的一个小脚本,代码略为简陋. 此代码仅供学习与交流,请不要用于违法用途. import requests from lxm ...

  8. 经典文献阅读之--用于自动驾驶的高清地图生成技术

    0. 简介 这篇文章我们介绍一下论文"High-Definition Map Generation Technologies For Autonomous Driving: A Review ...

  9. C语言程序设计:现代方法 中文高清PDF版下载

    C语言程序设计:现代方法 中文高清PDF版下载 转载于:https://www.cnblogs.com/gavinhughhu/archive/2009/12/08/1619074.html

  10. SQL宝典(中文版) 高清PDF版下载

    SQL宝典(中文版) 高清PDF版下载 转载于:https://www.cnblogs.com/gavinhughhu/archive/2010/01/05/1639951.html

最新文章

  1. 分布式架构基础:Java RMI详解
  2. .Net中堆栈和堆的区别
  3. 分析深圳电信的新型HTTP劫持方式
  4. js layui跳转页面_【WEB前端开辟】layui的iframe跳转链接与页面按钮跳转相干引见...
  5. 计算机专业开学要带电脑吗,大学新生刚开学需要带电脑吗
  6. 谁还 Care 戴尔?
  7. 计算机在工业工程中的应用,在工业工程中信息技术的应用原稿(全文完整版)...
  8. [No0000143]Win10“卓越性能模式”
  9. 简述神经网络的优点和缺点,人工神经网络优缺点
  10. foobox 2.11(foobar2000 CUI配置)
  11. 中国工商银行科技岗面试
  12. python pandas按照行数切分文件
  13. 股票分红信息 股票历次分红查询
  14. K8s - 札记 - 脑裂
  15. APICloud入门
  16. fastdfs+nginx+keepalived+openoffice+lua 实现文件上传、下载、水印、预览(word、excel、ppt、txt),feign文件上传
  17. 用Python批量生成指定尺寸的缩略图!比Ps好用!
  18. leetcode分类刷题笔记
  19. R语言的置信区间以及中心极限定理
  20. 基于javaweb项目ssm食品管理系统设计与实现(论文+程序设计源码+数据库文件)

热门文章

  1. 软件可维护性测试方法,软件可维护性
  2. crc循环冗余校验码c语言,crc循环冗余校验码算法
  3. PDB药物综合数据库必备8大类非付费网址80个
  4. DriverFinder(电脑驱动升级软件)官方正式版V4.1.0.0 | 最好的电脑驱动软件之一 | win10更新驱动用什么软件
  5. linux中查看resin进程,resin安装
  6. 对booth算法的一点理解
  7. Linux系统安全强化指南
  8. python 多目标跟踪_多目标追踪器:用 OpenCV 实现多目标追踪(C++/Python)
  9. 最新席瓦莱恩服务器人口比例,2021魔兽世界怀旧服3月人口普查_最新怀旧服3月人口普查数据一览_3DM网游...
  10. Python——百度识图-相似图片爬虫下载解决方案