地图下载器代码结构设计及功能实现

16 篇文章 3 订阅
订阅专栏
13 篇文章 0 订阅
订阅专栏
    • jcef包引入

    • 表结构设计

    • 后台关键代码结构

    • 前端关键代码结构

    • 功能展示

    • 启动页
    • 底图切换
    • 绘制选择下载区域
    • 行政区划切换选择下载区域
    • 下载
    • 关键代码

import { InnerMqClient } from '../../rx/inner-mq.service';

import { SubmitService } from '../../service/submit.service';

import { MapBase } from '../../map/map-base';

import { CommonUtil } from '../../util/common-util';

import { MapPage } from '../../view/page/map/map.page';

import { MapDraw } from '../../map/draw/map-draw';

import { MapWrap } from '../../map/draw/map-wrap';

import { GeoUtil } from "../../map/geo-util";

import { Point } from "../../map/entity/Point";

export class MapMessageProcessor {

constructor(

private mqClient: InnerMqClient,

private submitService: SubmitService,

private mapBase: MapBase,

private mapPage: MapPage,

) {

/** 放大 */

mqClient.sub('ZoomIn').subscribe((res) => {

mapBase.zoomIn();

});

/** 缩小 */

mqClient.sub('ZoomOut').subscribe((res) => {

mapBase.zoomOut();

});

/** 拖动 */

mqClient.sub('Pan').subscribe((res) => {

mapBase.pan();

});

/** 显示网格 */

mqClient.sub('GridSwitch').subscribe((res) => {

let update;

if (mapBase.getGridVisible()) {

mapBase.closeGrid();

update = false;

} else {

mapBase.showGrid();

update = true;

}

let config = mapBase.getMapConfig();

if (config) {

config.grid = update;

CommonUtil.setConfigCache(config);

mapBase.setMapConfig(config);

}

});

/** 切换图层源 */

mqClient.sub('SwitchResource').subscribe((res) => {

// 切换图层

debugger

let lastType = mapBase.getCurrentCoordinateType();

mapBase.switchMapResource(res);

let currentType = mapBase.getCurrentCoordinateType();

// 保存设置

let config = mapBase.getMapConfig();

if (config) {

config.layer = res;

CommonUtil.setConfigCache(config);

mapBase.setMapConfig(config);

}

// 检查坐标类型

if (lastType != currentType) {

if (lastType == 'wgs84' && currentType == 'gcj02') {

mapBase.turnMapFeaturesFromWgs84ToGcj02();

} else if (lastType == 'gcj02' && currentType == 'wgs84') {

mapBase.turnMapFeaturesFromGcj02ToWgs84();

}

}

// 回调

setTimeout(() => {

mapPage.updateShowInfo();

});

});

/** 绘制类型切换 - */

mqClient.sub('SwitchDrawType').subscribe((res) => {

mapBase.setDrawType(res);

});

/** 绘制 - */

mqClient.sub('OpenDraw').subscribe((res) => {

mapBase.pan();

mapBase.removeDrawedFeatures();

mapBase.openDraw({

drawEnd: () => {

setTimeout(() => {

mapBase.removeDrawInteraction();

})

},

modifyEnd: () => {

}

});

});

/** 绘制指定多边形并定位 - */

mqClient.sub('DrawPolygonAndPositioning').subscribe((res) => {

mapBase.pan();

mapBase.removeDrawedFeatures();

let blocks = JSON.parse(res);

for (let i = 0; i < blocks.length; i++) {

let points: Array<Point> = [];

for (let j = 0; j < blocks[i].length; j++) {

let point = new Point(blocks[i][j].lng, blocks[i][j].lat);

if (mapBase.getCurrentCoordinateType() == 'wgs84') {

points.push(GeoUtil.gcj02_To_wgs84(point));

} else {

points.push(point);

}

}

let feature = MapDraw.createPolygonFeature(points);

MapWrap.addFeature(mapBase, mapBase.drawLayerName, feature);

}

mapBase.setFitviewFromDrawLayer();

});

/** fitview - */

mqClient.sub('Fitview').subscribe((res) => {

mapBase.setFitviewFromDrawLayer();

});

/** 删除绘制 - */

mqClient.sub('RemoveDrawedShape').subscribe((res) => {

mapBase.removeDrawedFeatures();

});

/** 提交区块下载 - */

mqClient.sub('SubmitBlockDownload').subscribe((res) => {

let data = {

tileName: this.mapBase?.getCurrentXyzName(),

mapType: CommonUtil.getMapType(this.mapBase?.getCurrentXyzName()),

tileUrl: this.mapBase?.getCurrentXyzUrlResources(),

points: this.mapBase?.getDrawedPoints(),

};

this.submitService.blockDownload(data).then((r) => {

});

});

/** 提交世界下载 - */

mqClient.sub('SubmitWorldDownload').subscribe((res) => {

let data = {

tileName: this.mapBase?.getCurrentXyzName(),

mapType: CommonUtil.getMapType(this.mapBase?.getCurrentXyzName()),

tileUrl: this.mapBase?.getCurrentXyzUrlResources()

};

this.submitService.worldDownload(data).then((r) => {

});

});

}

}

package com.jmd.http;

import java.io.File;

import java.io.IOException;

import java.util.HashMap;

import org.apache.commons.io.FileUtils;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Component;

import com.jmd.entity.result.DownloadResult;

import com.jmd.inst.DownloadAmountInstance;

import com.jmd.util.CommonUtils;

@Component

public class HttpDownload {

@Autowired

private HttpClient http;

@Autowired

private DownloadAmountInstance downloadAmountInstance;

/** 通过URL下载文件 */

public DownloadResult downloadTile(String url, HashMap<String, String> headers, int imgType, String path,

int retry) {

DownloadResult result = new DownloadResult();

boolean success = false;

byte[] bytes = http.getFileBytes(url, headers);

if (null != bytes) {

byte[] imgData = imageSwitch(imgType, bytes);

try {

if (null != imgData) {

// result.setImgData(imgData);

File file = new File(path);

FileUtils.writeByteArrayToFile(file, imgData);

if (file.exists() && file.isFile()) {

downloadAmountInstance.add(file.length());

success = true;

}

}

} catch (IOException e) {

success = false;

e.printStackTrace();

}

}

if (success) {

result.setSuccess(true);

} else if (Thread.currentThread().isInterrupted()) {

result.setSuccess(false);

} else {

retry = retry - 1;

if (retry >= 0) {

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

}

return downloadTile(url, headers, imgType, path, retry);

} else {

result.setSuccess(false);

}

}

return result;

}

/** 下载的图片进行转码 */

private byte[] imageSwitch(int imgType, byte[] imgData) {

if (imgType == 0) {

// 保持PNG

return imgData;

} else if (imgType == 1 || imgType == 2 || imgType == 3) {

// 转换为JPG

float quality = 0.9f;

switch (imgType) {

case 1:

quality = 0.2f;

break;

case 2:

quality = 0.6f;

break;

case 3:

quality = 0.9f;

break;

default:

break;

}

try {

return CommonUtils.png2jpg(imgData, quality);

} catch (IOException e) {

e.printStackTrace();

}

}

return null;

}

}

如果对您有帮助

感谢支持技术分享,请扫码点赞支持:

技术合作交流qq:2401315930

编辑

编辑

编辑

自己开发的瓦片地图下载window32位系统
03-15
自己发开的地图下载,免费绿色,支持高德地图、谷歌地图、智图地图、Open Street Map等数据源的瓦片地图下载,支持影像图和电子地图等多种类型地图,32位系统版
C#谷歌地图下载源码
08-20
C#谷歌地图下载源码,可以按照图层下载,可以按照经纬度确定位置坐标。下载地图可以用在小平台中调取和使用,代码下载100%可直接运行。
基于GMap.NET的地图瓦片下载源码
10-29
下载前请先浏览博客或下载试用程序,确保是您需要的源码(解压密码:www.xnh39.com)。 博客介绍:http://blog.csdn.net/welliu/article/details/78386446 程序下载:http://download.csdn.net/download/welliu/10043860 该地图瓦片下载是根据GMap.Net源码改编,主要以高德地图源作以演示,提供了矩形、圆形、多边形、图标、报警图标、图表、测距等元素的使用与编辑;提供了地图瓦片下载功能,提供了多类型地图源的配置(普通地图、卫星地图、路网地图、自定义地图源)。
百度离线地图下载+开发Demo(街道、路网、卫星瓦片图)
qq_27352959的博客
04-21 1422
这里写自定义目录标题欢迎使用Markdown编辑新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑 你好! 这是你第一次使用 Markdown编辑 所展示的欢迎页。如果你想学习如何使用Mar
源码的百度地图下载
10-29
真正可免费下载百度地图瓦片,并提供C#源码。可以选择区域、地图级别。不会用C#的,可以直接运行\BaiduMapTile\bin\Debug下的exe文件下载百度地图,实测可用!!!
78行Python代码实现现微信撤回消息功能
09-20
代码中的`@itchat.msg_register`装饰用于指定要处理的消息类型,如文本、图片、地图、名片、分享、录音、附件、视频等。 5. **消息元数据**: 每个微信消息包含多种元数据,例如`MsgId`(消息ID)、`CreateTime`...
JAVA上百实例源码以及开源项目源代码
09-17
util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码加以...
Android入门到精通源代码.
05-07
《Android从入门到精通》 第1章 初识Android 1.1 什么是Android 1.1.1 移动信息设备分类 1.1.2 Open Handset Alliance和 Android 1.2 Android简介 ...13.3 俄罗斯方块游戏功能实现 13.4 俄罗斯方块游戏演示
Android高级编程--源代码
02-06
7.8 对Earthquake示例添加地图功能 241 7.9 小结 247 第8章 后台工作 249 8.1 服务简介 250 8.1.1 创建和控制服务 250 8.1.2 将活动和服务绑定 259 8.2 使用后台工作线程 260 8.2.1 创建新的线程 260 8.2.2 ...
google地图瓦片下载,含源码
10-12
本工具由群Arcgis for flex群下载,感谢这位朋友的共享
网络地图下载工具源码
09-21
可以通过设置下载地图图片范围下载网络在线地图,本人已经用来下载了google的影像地图以及E都市的三维地图
开源地图下载
09-28
开源地图下载,是由 openlayers 中文官方站开发的,本程序为开源免费版,没有下载限制,只能下载 google 行政图,卫星图,和地形图。其 他地图可以自行扩展
offlinemap:百度离线地图和初步下载源码及演示
03-22
离线地图 在客户需求中,需要把项目部署在局域网中,但是我们的项目使用了在线地图,就需要把地图迁移至离线版。经过很长时间的查找,终于找到了相关源码。 演示 相关静态文件及示例页面 wapianloadder 瓦片下载源码,该代码使用C#编写,有点爬虫的味道。
地图下载
01-09
1、安装原版软件 2、将注册机和imaps.exe复制到软件安装目录(不要覆盖掉原来的imaps.exe,将它改个名字为imaps_ori.exe) 3、运行注册机 4、点击“获取注册码” 5、注册机调用imaps.exe并读出注册码 6、将imaps_ori.exe改名为imaps.exe(可先删除imaps.exe),运行原版软件,输入获取的注册码,即为注册版
自己动手编程实现“电子地图下载
wenbbo的博客
02-19 2154
自己动手编程实现“电子地图下载” 请联系本文作者(QQ:442134556)获取源码 电子地图对于国土规划、交通运输、水利设计、农林地质等部门的测绘、测量专业设计人员至关重要。国内已有一些公司提供下载软件,如迈高图(megomap)地图下载、水经注(rivermap)万能地图下载、BIGEMAP地图下载、全能电子地图下载等。这些软件的使用费从几百元到几千元不等。其实,绝大部分地理信息图...
Android 高德地图API(详细步骤+源码
热门推荐
晨曦
12-25 7万+
为了丰富对地图、定位的了解,在写了百度、腾讯的地图定位之后,终于到了高德地图了。我个人平时日常使用最多的定位软件就是高德地图。所以这篇文章,就带你来初步了解使用。 前言 正文   在此之前呢,默认都没有账号,因此需要先注册一个账号账号才行,点击高德开放平台进入主页面。 点击右上角的注册按钮,然后选择注册开发者的类型,有个人开发者、企业开发者。 如果你已经工作了可以选择企业开发者,只不过需要填写的资料要多一些,这里我选择成为个人开发者,点击。 勾选上这个选项,然后点击确认注册开发者,进入下一步,填写个人
全能电子地图下载MapTileDownloader(该软件可提供地图瓦片图)的安装和使用
最新发布
zwkyyds的博客
01-28 1万+
第一步:下载,这是我自己的网盘下载地址链接:https://pan.baidu.com/s/14KUfjHovWyaGx5Af8qpNWw。复制,最后双击 imaps.exe(打开全能电子地图下载的),粘贴刚刚复制的注册码,然后点击注册,就可以白嫖式用全能电子地图下载啦!打开咱刚刚的下载包,存在两个文件,imaps1.95_Sniffer.exe和imaps.exe。后面当然是傻瓜式安装啦,当然到最后一步,要把那个运行的勾勾去掉,因为咱要配置些个东西。将这两文件拖到下载好的文件中。
基于gmap.net制作离线地图下载
ddbbehpx140240的博客
02-28 930
1、gmap.net 源码下载http://greatmaps.codeplex.com/ 2、Gmap.net基本使用。下载源码源码结构如下图所示: 制作下载需要用到的两个库是gmap.net.core和gmap.net.windowsforms两个库,编译后可以把多余的工程删掉,新建一个DownMap工程。 然后将gmap.net.core和gmap.net.win...
基于Linux下载文件的功能设计与实现实用文档doc.doc
12-01
基于Linux下载文件的功能设计与实现实用文档doc.doc

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • cesium绘制河流流水 17527
  • vue+cesium实现风场 10514
  • 将gdb批量导出shp 8395
  • cesium实现绘制网格效果 6043
  • vue+cesium生成热力图 5867

分类专栏

  • AI 3篇
  • 水利专题 8篇
  • openlayers 16篇
  • Cesium 13篇
  • 分布函数 36篇
  • 数据库 1篇
  • geotools 7篇
  • 环保模型 9篇
  • cesium地图 14篇
  • IClient 9篇
  • three 2篇
  • webgl 2篇
  • arcmap 10篇
  • arcgis for js 16篇
  • Python 3篇
  • .net 37篇
  • IT人员的修养 1篇
  • 水文模型 1篇
  • geoserver
  • java 13篇
  • js 34篇
  • node 3篇

最新评论

  • cesium实现绘制网格效果

    兴诚: 博主QQ2401315930

  • cesium实现绘制网格效果

    兴诚: QQ2401315930

  • 粒子群算法Java实现

    Kwan的解忧杂货铺: 博主的博客每次都能让我豁然开朗,明白了很多不懂的问题,真的非常感谢你的贡献。每篇博文都是知识的瑰宝,我真的很喜欢你的风格,博主的文章总是内容丰富,通俗易懂,每次阅读都是一次启发,期待你的下一篇佳作。感谢精彩分享。

  • 粒子群算法Java实现

    2401_85111936: 写的很详细,感谢博主的分享。【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

  • openlayer实现ImageStatic扩展支持平铺Wrapx

    Kwan的解忧杂货铺: 博主的博客每一篇博文都如一本启发书,我从中汲取灵感,希望博主继续为我们献上这些珍宝。是我的学习良师,每篇文章都充满见解,让我茅塞顿开,你的文章总是让我对复杂的主题有更深入的理解,非常感激你的专业分享。期待更多分享。

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 气象数据NC、grb2解析成矢量json、CMIS、MICPS及图片应用到webgis
  • Java实现物候相机和植被分析导出相对指数成果图
  • 粒子群算法Java实现
2024年13篇
2023年23篇
2022年29篇
2021年49篇
2020年9篇
2019年3篇
2018年3篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兴诚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

点石阅读毕姓男孩起名大全计算机病毒是指拥兵天下闺蜜生日祝福语她的小梨涡商业街起名苏武牧羊的故事重生之传奇时代陈枫燕清羽最新章节免费阅读卡拉赞门任务姓孙起什么名字好呢男孩子冉庄地道战遗址今天的幸福2名人名句数字北外秘密战队五连者手机免费看赘婿电视剧全集2019年猪宝宝起小名乳名大全王字男人起名大全温馨种田文蜀汉酒楼CFO是指什么职位大时代电视剧从士兵突击开始的影视剧特种兵刚出生的男生起名字淘宝品牌特卖化粪池图集个人工作室起名字够爱男孩子国学起名歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

点石阅读 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化