当前位置:   article > 正文

高德地图离线内网部署+本地地图瓦片_web高德离线地图

web高德离线地图

1,文章声明:

高德地图请参考官方文档高德地图API

声明本离线包基于高德地图js-api1.4,在此基础进行修改。
本项目仅为个人兴趣开发,不收费,作者也不提供任何付费服务。
本项目仅供个人学习研究使用。
本项目禁止商用,禁止在企业项目开发中使用此地图离线包,禁止使用此离线包以及基于此项目二次开发的软件从事盈利活动。

2.使用步骤:

2.1 准备离线地图的物料就是地图瓦片的数据(这个数据网上有很多教程可以下载 就是下载地图的图片数据)放在项目根目录下 我的是一个城市瓦片 一个卫星瓦片

2.2 获取你所需要使用的地图API相关的JS压缩文件(在根目录创建map.js 放这些js 代码)

2.3 创建本地的node服务来访问你本地的瓦片数据 在根目录创建server.js 来启动node服务 可以离线访问瓦片数据了

  1. const express = require("express");
  2. const path = require("path");
  3. const os = require("os");
  4. const app = express();
  5. // 允许所有来源的跨域请求
  6. app.use((req, res, next) => {
  7. res.header("Access-Control-Allow-Origin", "*");
  8. res.header(
  9. "Access-Control-Allow-Headers",
  10. "Origin, X-Requested-With, Content-Type, Accept"
  11. );
  12. next();
  13. });
  14. // // 设置瓦片文件夹的路径
  15. // const tilesFolder = path.join(__dirname, 'MAP');
  16. // 配置卫星图层的路由
  17. app.use("/satellite", express.static(path.join(__dirname, "MAP/satellite")));
  18. // 配置城市图层的路由
  19. app.use("/city", express.static(path.join(__dirname, "MAP/city")));
  20. // 获取当前操作系统是否为 Linux
  21. const isLinux = process.platform === "linux";
  22. // 根据不同操作系统设置基础 URL
  23. let base_url;
  24. if (isLinux) {
  25. function getIPByInterface(interfaceName) {
  26. const interfaces = os.networkInterfaces();
  27. if (interfaces.hasOwnProperty(interfaceName)) {
  28. const interfaceInfo = interfaces[interfaceName];
  29. for (const iface of interfaceInfo) {
  30. // 只获取 IPv4 地址,并且不是 loopback 地址
  31. if (iface.family === "IPv4" && !iface.internal) {
  32. return iface.address;
  33. }
  34. }
  35. }
  36. return null; // 如果指定的接口不存在或者没有对应的 IP 地址,则返回 null
  37. }
  38. const interfaceName = "eth1"; // 指定要检查的网络接口名称
  39. const ip = getIPByInterface(interfaceName);
  40. if (ip) {
  41. console.log(`IP address of ${interfaceName}: ${ip}`);
  42. base_url = `http://${ip}:3000`;
  43. } else {
  44. console.log(`No IP address found for interface ${interfaceName}`);
  45. }
  46. } else {
  47. const port = process.env.PORT || 3000;
  48. const host = process.env.HOST || "localhost";
  49. // 其他操作系统下的默认设置
  50. base_url = `http://${host}:${port}`;
  51. }
  52. // 启动服务器
  53. const server = app.listen(3000, () => {
  54. console.log(`Server is running on ${base_url}`);
  55. });

2.4 现在只需要启动你的node server.js的服务就可以访问离线地图了 在你的项目根目录下 打开终端运行 node server.js 就可以了(如果有后台服务 可以放在后台服务中完成 让后端配合 开启一个访问地址 可以访问地图瓦片数据也行)

2.5 最后一步,在init map的时候设置图层(我这里是有网也可以访问 没网也可以 第一次访问的时候 需要联一下网就可以了)

  1. const A_MAP_KEY = ""; // 地图key
  2. const A_MAP_SECRET_KEY = ""; // 地图密钥
  3. // 地图初始化
  4. const script = document.createElement('script');
  5. script.src = `https://webapi.amap.com/maps?v=1.4.15&key=${A_MAP_KEY}`;
  6. script.onload = this.initAmap.bind(this);
  7. document.head.appendChild(script);
  8. const script1 = document.createElement('script');
  9. script1.src = '../../map.js';
  10. script1.onload = this.initAmap.bind(this);
  11. document.head.appendChild(script1);
  1. //初始化地图
  2. initAmap() {
  3. // todo 这里的baseurl 是瓦片地图的图层 根据服务器来
  4. let base_url = "http://localhost:3000";
  5. const customLayer = [new AMap.TileLayer({
  6. getTileUrl: function (x, y, z) {
  7. return `${base_url}/city/${z}/${x}/${y}.jpg`;
  8. },
  9. opacity: 1,
  10. zIndex: 99,
  11. })]
  12. this.map = new AMap.Map("container", {
  13. zoom: 12,
  14. resizeEnable: true,
  15. defaultCursor: 'pointer',
  16. showLabel: true, //是否显示文字标注
  17. center: this.centerPoint ,
  18. scrollWheel: true,
  19. viewMode: '3D', //显示罗盘 就需要3D地图了
  20. pitch: 0,
  21. layers: customLayer,
  22. });
  23. this.map.add(customLayer)
  24. AMap.plugin(
  25. [
  26. "AMap.ToolBar",
  27. "AMap.Scale",
  28. 'AMap.ControlBar'
  29. // "AMap.MapType",
  30. ],
  31. );

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/929991
推荐阅读
相关标签
  

闽ICP备14008679号