uniapp 地图分幅网格生成 小程序基于map组件

// 获取小数部分
const fractional = function(x) {x = Math.abs(x);return x - Math.floor(x);
}
const formatInt = function(x, len) {let result = '' + x;len = len - result.length;while (len > 0) {result = '0' + result;len--;}return result;
}/*** 创建标准分幅网格* @param west,south,east,north 传入要创建的标准分幅网格的经纬度范围* @param scalem 表示比例尺的分母(例如 10000 表示 1:1万)* @returns 返回一个 geojson 对象*/
export function makeStandardMapGrids(west, south, east, north, scalem) {let lngDiff = 0;let latDiff = 0;let scaleCode = '';switch (scalem) {case 1000000:lngDiff = 6;latDiff = 4;break;case 500000:lngDiff = 3;latDiff = 2;scaleCode = 'B';break;case 250000:lngDiff = 1.5;latDiff = 1;scaleCode = 'C';break;case 100000:lngDiff = 0.5;latDiff = 1 / 3;scaleCode = 'D';break;case 50000:lngDiff = 0.25;latDiff = 1 / 6;scaleCode = 'E';break;case 25000:lngDiff = 0.125;latDiff = 1 / 12;scaleCode = 'F';break;case 10000:lngDiff = 0.0625;latDiff = 1 / 24;scaleCode = 'G';break;case 5000:lngDiff = 0.03125;latDiff = 1 / 48;scaleCode = 'H';case 2000:lngDiff = 37.5 / 3600.0;latDiff = 25.0 / 3600.0;scaleCode = 'I';break;case 1000:lngDiff = 18.75 / 3600.0;latDiff = 12.5 / 3600.0;scaleCode = 'J';break;case 500:lngDiff = 9.375 / 3600.0;latDiff = 6.25 / 3600.0;scaleCode = 'K';break;default:return null;}const GridX0 = -180;const GridX1 = 180;const GridY0 = -88;const GridY1 = 88;let x0 = Math.max(GridX0, west);let y0 = Math.max(GridY0, south);let x1 = Math.min(GridX1, east);let y1 = Math.min(GridY1, north);if (((x1 - x0) < lngDiff) || ((y1 - y0) < latDiff)) {return null;}let features = []; // 存储生成的面要素let coordinates = [] // 存储生成的面要素坐标对// 计算标准分幅网格行列范围const col0 = parseInt((x0 - GridX0) / lngDiff);const col1 = parseInt((x1 - GridX0) / lngDiff);const row0 = parseInt((y0 - GridY0) / latDiff);const row1 = parseInt((y1 - GridY0) / latDiff);const millionRowCode = 'ABCDEFGHIJKLMNOPQRSTUV';for (let row = row0; row <= row1; row++) {let gy0 = GridY0 + row * latDiff;let gy1 = gy0 + latDiff;let gcy = (gy0 + gy1) * 0.5; // 分幅中心点 y 坐标let millionRow = parseInt((gy0 - 0) / 4); // 1:100分幅行号let Hemisphere = ''; // 北半球标志if (millionRow < 0) {millionRow = -1 - millionRow;Hemisphere = 'S'; // 南半球标志}for (let col = col0; col <= col1; col++) {let gx0 = GridX0 + col * lngDiff;let gx1 = gx0 + lngDiff;let gcx = (gx0 + gx1) * 0.5; // 分幅中心点 x 坐标let millionCol = parseInt((gcx - GridX0) / 6) + 1; // 1:100分幅列号(从1开始)coordinates = [[[gx0, gy0],[gx1, gy0],[gx1, gy1],[gx0, gy1],[gx0, gy0]]];millionCol = (millionCol < 10) ? ('0' + millionCol) : millionCol;let gridID = Hemisphere + millionRowCode[millionRow] + millionCol;if (scaleCode != '') {// 计算当前分幅在 1:100万 分幅内的行列号(注意,这里行列号从左向右,从北向南,从1开始编号)let colID = parseInt((fractional((gcx - GridX0) / 6) * 6) / lngDiff) + 1;let rowID = parseInt((fractional((GridY1 - gcy) / 4) * 4) / latDiff) + 1;gridID += scaleCode + formatInt(rowID, 3) + formatInt(colID, 3);}// 生成矢量要素(几何信息+属性信息)let feature = {type: "Feature",geometry: {type: "Polygon",coordinates: coordinates},properties: {ID: gridID,extend: '西:' + gx0 + ' 东:' + gx1 + ' 南:' + gy0 + ' 北:' + gy1,lat: gcy.toFixed(6),lng: gcx.toFixed(6)},location: {latitude: Number(gcy.toFixed(6)),longitude: Number(gcx.toFixed(6)),}};features.push(feature);}}return {type: "FeatureCollection",features: features};
}

 我国把 1:1 万、1:2.5 万、1:5 万、1:10 万、1:25 万、1:50 万、1:100 万 7 种比例尺作为国家基本地图的比例尺系列。根据国家标准GB/13989-92 《国家基本比例尺地形图分幅和编号》规定,我国基本比例尺地形图均1:100 万地形图为基础,按规定的经差和纬差划分图幅。下表为地形图的经纬差、行列数及图幅数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/803777.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32学习和实践笔记(6):自己进行时钟配置的思路

在《STM32学习和实践笔记&#xff08;4&#xff09;: 分析和理解GPIO_InitTypeDef GPIO_InitStructure (d)-CSDN博客》 中&#xff0c;我了解到&#xff0c;在程序执行我们写的main函数之前&#xff0c;实际上先执行了一个汇编语言所写的启动文件&#xff0c;以完成相应的初始…

django celery 异步任务 异步存储

环境&#xff1a;win11、python 3.9.2、django 4.2.11、celery 4.4.7、MySQL 8.1、redis 3.0 背景&#xff1a;基于django框架的大量任务实现&#xff0c;并且需要保存数据库 时间&#xff1a;20240409 说明&#xff1a;异步爬取小说&#xff0c;并将其保存到数据库 1、创建…

配置交换机SSH管理和端口安全——实验2:配置交换机端口安全

实验目的 通过本实验可以掌握&#xff1a; 交换机管理地址配置及接口配置。查看交换机的MAC地址表。配置静态端口安全、动态端口安全和粘滞端口安全的方法 实验拓扑 配置交换机端口安全的实验拓扑如图所示。 配置交换机端口安全的实验拓扑 实验步骤 &#xff08;1&#x…

springboot+vue2+elementui+mybatis- 批量导出导入

全部导出 批量导出 报错问题分析 经过排查&#xff0c;原因是因为在发起 axios 请求的时候&#xff0c;没有指定响应的数据类型&#xff08;这里需要指定响应的数据类型为 blob 二进制文件&#xff09; 当响应数据回来后&#xff0c;会执行 axios 后置拦截器的代码&#xff0…

[开源] 基于transformer的时间序列预测模型python代码

分享一下基于transformer的时间序列预测模型python代码&#xff0c;给大家&#xff0c;记得点赞哦 #!/usr/bin/env python # coding: 帅帅的笔者import torch import torch.nn as nn import numpy as np import pandas as pd import time import math import matplotlib.pyplo…

【Java8新特性】二、函数式接口

这里写自定义目录标题 一、什么是函数式接口二、自定义函数式接口三、作为参数传递 Lambda 表达式四、四大内置核心函数式接口1、消费形接口2、供给形接口3、函数型接口4、断言形接口 一、什么是函数式接口 只包含一个抽象方法的接口&#xff0c;称为函数式接口。你可以通过 L…

【MATLAB高级编程】第二篇 | 元胞数组(cell)操作

【第二篇】元胞数组&#xff08;cell&#xff09;操作 1. 创建元胞数组cell2. 查看和修改cell内的元素值3. 高级操作: 可视化作图显示cell内的内容4. 把矩阵转换成单元数组5. 把单元数组转换成结构体变量 你好&#xff01; 欢迎进入 《MATLAB高级编程》 文章系列 &#xff0c;每…

postgresql uuid

示例数据库版本PG16&#xff0c;对于参照官方文档截图&#xff0c;可以在最上方切换到对应版本查看&#xff0c;相差不大。 方法一&#xff1a;自带函数 select gen_random_uuid(); 去掉四个斜杠&#xff0c;简化成32位 select replace(gen_random_uuid()::text, -, ); 官网介绍…

《前端面试题》- CSS - CSS选择器的优先级

行内样式1000 d选择器100 属性选择器、class或者伪类10 元素选择器&#xff0c;或者伪元素1 通配符0 参考网址&#xff1a;https://blog.csdn.net/jbj6568839z/article/details/113888600https://www.cnblogs.com/RenshuozZ/p/10327285.htmlhttps://www.cnblogs.com/zxjwlh/p/6…

搭建Grafana+Prometheus监控Spring Boot应用

Spring项目改造 maven依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId> </dependency><dependency><groupId>io.micrometer</groupId><artif…

​如何使用 ArcGIS Pro 制作带贴图建筑

对于用GIS软件制作三维建筑&#xff0c;很多时候都是制作的建筑体块&#xff0c;这里为大家介绍一下怎么使用 ArcGIS Pro 制作带贴图的建筑&#xff0c;希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的建筑数据&#xff0c;除了建筑数据&#xff0c;常见…

最简洁的Docker环境配置

Docker环境配置 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中&#xff0c;然后发布到任何流行的 Mac、Linux或Windows操作系统的机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间不…

AI大模型探索之路-应用篇2:Langchain框架ModelIO模块—数据交互的秘密武器

目录 前言 一、概述​​​​​​​ 二、Model 三、Prompt 五、Output Parsers 总结 前言 随着人工智能技术的不断进步&#xff0c;大模型的应用场景越来越广泛。LangChain框架作为一个创新的解决方案&#xff0c;专为处理大型语言模型的输入输出而设计。其中&#xff0c;…

redis主从复制详解

redis主从复制(replica) 1、是什么&#xff1f; 目录 redis主从复制(replica) 1、是什么&#xff1f; 2、能干嘛&#xff1f; 3、怎么玩&#xff1f; 4、案例演示 前置操作 &#x1f357;一主二仆 &#x1f355;薪火相传 &#x1f32d;反客为主 5、复制的原理和工作…

Flutter仿Boss-6.底部tab切换

效果 实现 图片资源采用boss包中的动画webp资源。Flutter采用Image加载webp动画。 遇到的问题 问题&#xff1a;Flutter加载webp再次加载无法再次播放动画问题 看如下代码&#xff1a; Image.asset(assets/images/xxx.webp,width: 40.w,height: 30.w, )运行的效果&#xf…

Vue3 + Vite 构建组件库发布到 npm

你有构建完组件库后&#xff0c;因为不知道如何发布到 npm 的烦恼吗&#xff1f;本教程手把手教你用 Vite 构建组件库发布到 npm 搭建项目 这里我们使用 Vite 初始化项目&#xff0c;执行命令&#xff1a; pnpm create vite my-vue-app --template vue这里以我的项目 vue3-xm…

GPT提示词分享 —— 中医

&#x1f449; 中医诊断涉及因素较多&#xff0c;治疗方案仅供参考&#xff0c;具体的方子需由医生提供。AI建议不能替代专业医疗意见&#xff0c;如果症状严重或持续&#xff0c;建议咨询专业医生。 我希望你能扮演一位既是老中医同时又是一个营养学专家&#xff0c;我讲描述…

Linux部署FTP服务器

文章目录 什么是FTP协议&#xff1f;Linux上部署FTP服务器安装FTP服务启动FTP服务编辑/etc/vsftpd.conf重新启动服务测试FTP服务 什么是FTP协议&#xff1f; FTP协议是一种基于TCP的文件传输协议&#xff0c;能够实现高效的文件上传和下载功能&#xff0c;最重要的是它能够使用…

LeetCode-322. 零钱兑换【广度优先搜索 数组 动态规划】

LeetCode-322. 零钱兑换【广度优先搜索 数组 动态规划】 题目描述&#xff1a;解题思路一&#xff1a;Python动态规划五部曲&#xff1a;定推初遍举【先遍历物品 后遍历背包】解题思路二&#xff1a;Python动态规划五部曲&#xff1a;定推初遍举【先遍历背包 后遍历物品】解题思…

组装机械狗电子玩具方案

这款机械狗玩具电子方案结合了现代电子技术和人工智能元素&#xff0c;旨在为用户提供一个高科技、互动性强的娱乐体验。通过不断的软件更新和硬件迭代&#xff0c;机械狗的功能将持续扩展。 一、功能特点&#xff1a; 1、自动巡游&#xff1a;机械狗能够自主在房间内巡游&am…