当前位置: 首页 > news >正文

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 万地形图为基础,按规定的经差和纬差划分图幅。下表为地形图的经纬差、行列数及图幅数。

相关文章:

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 …...

python项目练习——22、人脸识别软件

功能分析: 人脸检测: 识别图像或视频中的人脸,并标记出人脸的位置和边界框。 人脸识别: 识别人脸的身份或特征,通常使用已知的人脸数据库进行训练,然后在新的图像或视频中识别出人脸并匹配到相应的身份。 表情识别: 识别人脸的表情,如高兴、悲伤、愤怒等,并给出相应…...

Linux中账号登陆报错access denied

“Access denied” 是一个权限拒绝的错误提示&#xff0c;意味着用户无法获得所请求资源的访问权限。出现 “Access denied” 错误的原因可以有多种可能性&#xff0c;包括以下几种常见原因&#xff1a; 错误的用户名或密码&#xff1a;输入的用户名或密码不正确&#xff0c;导…...

python语言之round(num, n)小数四舍五入

文章目录 python round(num, n)小数四舍五入python round(num, n)基础银行家舍入&#xff08;Bankers Rounding&#xff09;利息被银行四舍五入后&#xff0c;你到底是赚了还是亏了&#xff1f; python小数位的使用decimal模块四舍五入(解决round 遇5不进) python round(num, n…...

安全风险攻击面管理如何提升企业网络弹性?

从研究人员近些年的调查结果来看&#xff0c;威胁攻击者目前非常善于识别和利用最具有成本效益的网络入侵方法&#xff0c;这就凸显出了企业实施资产识别并了解其资产与整个资产相关的安全态势的迫切需要。 目前来看&#xff0c;为了在如此复杂的网络环境中受到最小程度上的网络…...

常用的几款性能测试软件

Apache JMeter是一款免费、开源的性能测试工具&#xff0c;广泛应用于Web应用程序和服务的性能测试。它支持模拟多种不同类型的负载&#xff0c;可以测试应用程序在不同压力下的性能表现&#xff0c;并提供丰富的图表和报告来分析测试结果。 优点&#xff1a; 免费且开源&…...

谷歌google浏览器无法更新Chrome至最新版本怎么办?浏览器Chrome无法更新至最新版本

打开谷歌google浏览器提示&#xff1a;无法更新Chrome&#xff0c;Chrome无法更新至最新版本&#xff0c;因此您未能获得最新的功能和安全修复程序。点击「重新安装Chrome」后无法访问此网站&#xff0c;造成谷歌浏览器每天提示却无法更新Chrome至最新版本。 谷歌google浏览器无…...

认识异常(1)

❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; hellohello~&#xff0c;大家好&#x1f495;&#x1f495;&#xff0c;这里是E绵绵呀✋✋ &#xff0c;如果觉得这篇文章还不错的话还请点赞❤️❤️收藏&#x1f49e; &#x1f49e; 关注&#x1f4a5;&a…...

C++矩阵

C矩阵【基本】&#xff08;will循环&#xff09; #include<iostream> #include<string.h> using namespace std; int main() {int a[100][100]{0};int k 1;int i 0;int j 0;while(k<100){if(j>10){j0;i;}a[i][j]k;j;k;}i 0;j 0;while(true){if(i 9&am…...

解锁智能未来:用Ollama开启你的本地AI之旅

Ollama是一个用于在本地运行大型语言模型&#xff08;LLM&#xff09;的开源框架。它旨在简化在Docker容器中部署LLM的过程&#xff0c;使得管理和运行这些模型变得更加容易。Ollama提供了类似OpenAI的API接口和聊天界面&#xff0c;可以非常方便地部署最新版本的GPT模型并通过…...

CSS实现卡片在鼠标悬停时突出效果

在CSS中&#xff0c;实现卡片在鼠标悬停时突出&#xff0c;通常使用:hover伪类选择器。 :hover伪类选择器用于指定当鼠标指针悬停在某个元素上时&#xff0c;该元素的状态变化。通过:hover选择器&#xff0c;你可以定义鼠标悬停在元素上时元素的样式&#xff0c;比如改变颜色、…...

GPT建模与预测实战

代码链接见文末 效果图&#xff1a; 1.数据样本生成方法 训练配置参数&#xff1a; --epochs 40 --batch_size 8 --device 0 --train_path data/train.pkl 其中train.pkl是处理后的文件 因此&#xff0c;我们首先需要执行preprocess.py进行预处理操作&#xff0c;配置参数…...

传统方法(OpenCV)_车道线识别

一、思路 基于OpenCV的库&#xff1a;对视频中的车道线进行识别 1、视频处理&#xff1a;视频读取 2、图像转换&#xff1a;图像转换为灰度图 3、噪声去除&#xff1a;高斯模糊对图像进行去噪&#xff0c;提高边缘检测的准确性 4、边缘检测&#xff1a;Canny算法进行边缘检测…...

Git以及Gitlab的快速使用文档

优质博文&#xff1a;IT-BLOG-CN 安装git 【1】Windows为例&#xff0c;去百度下载安装包。或者去官网下载。安装过秳返里略过&#xff0c;一直下一步即可。丌要忉记设置环境发量。 【2】打开cmd&#xff0c;输入git –version正确输出版本后则git安装成功。 配置ssh Git和s…...

MyBatis Interceptor拦截器高级用法

拦截插入操作 场景描述&#xff1a;插入当前数据时&#xff0c;同时复制当前数据插入多行。比如平台权限的用户&#xff0c;可以同时给其他国家级别用户直接插入数据 实现&#xff1a; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.executor.Executor; impor…...

Python学习入门(2)——进阶功能

14. 迭代器和迭代协议 在Python中&#xff0c;迭代器是支持迭代操作的对象&#xff0c;即它们可以一次返回其成员中的一个。任何实现了 __iter__() 和 __next__() 方法的对象都是迭代器。 class Count:def __init__(self, low, high):self.current lowself.high highdef __i…...

华为改进点

华为公司可以在员工福利方面做出改进&#xff0c;提高员工的工作满意度和忠诚度。例如&#xff0c;可以增加员工福利&#xff0c;如提供更多灵活的工作时间、提供更好的培训和发展机会、加大健康保障和福利待遇等。 此外&#xff0c;华为公司也可以加强与客户的沟通与合作&…...

分布式技术---------------消息队列中间件之 Kafka

目录 一、Kafka 概述 1.1为什么需要消息队列&#xff08;MQ&#xff09; 1.2使用消息队列的好处 1.2.1解耦 1.2.2可恢复性 1.2.3缓冲 1.2.4灵活性 & 峰值处理能力 1.2.5异步通信 1.3消息队列的两种模式 1.3.1点对点模式&#xff08;一对一&#xff0c;消费者主动…...

BGP扩展知识总结

一、BGP的宣告问题 在BGP协议中每台运行BGP的设备上&#xff0c;宣告本地直连路由在BGP协议中运行BGP协议的设备&#xff0c;来宣告通过IGP学习到的未运行BGP协议设备产生的路由&#xff1b;&#xff08;常见&#xff09; 在BGP协议中宣告本地路由表中路由条目时&#xff0c;将…...

华为OD-C卷-按身高和体重排队[100分]

题目描述 某学校举行运动会&#xff0c;学生们按编号(1、2、3…n)进行标识&#xff0c;现需要按照身高由低到高排列&#xff0c;对身高相同的人&#xff0c;按体重由轻到重排列&#xff1b;对于身高体重都相同的人&#xff0c;维持原有的编号顺序关系。请输出排列后的学生编号…...

终极Windows驱动清理指南:3分钟快速释放C盘隐藏空间

终极Windows驱动清理指南&#xff1a;3分钟快速释放C盘隐藏空间 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 你是否发现Windows系统越用越慢&#xff0c;C盘空间莫名其妙消失&#x…...

AI测试的现状与未来:AI会取代人工测试吗

在软件测试领域&#xff0c;AI技术的崛起正掀起一场深刻变革。从自动化测试用例生成到智能缺陷检测&#xff0c;AI的应用场景不断拓展&#xff0c;效率提升显著。这让众多软件测试从业者不禁心生焦虑&#xff1a;AI是否会彻底取代人工测试&#xff1f;要解答这个问题&#xff0…...

颈椎健康互助平台

颈椎健康互助平台选题背景分析随着信息技术的飞速发展和现代社会工作、生活方式的深刻变革&#xff0c;颈椎健康问题已从一个单纯的医学议题&#xff0c;演变为一个影响广泛、亟待社会协同解决的公共健康挑战。颈椎健康互助平台的选题&#xff0c;正是在这一宏观背景下应运而生…...

Perplexity谣言查询实战手册:从输入到验证的7步黄金流程,附可复用提示词模板

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Perplexity谣言辟谣查询的底层逻辑与认知前提 Perplexity 并非一种“谣言检测模型”或内置辟谣数据库的独立系统&#xff0c;而是一个基于大语言模型&#xff08;LLM&#xff09;增强检索的问答式搜索引擎。其…...

Linux常用命令合集:从新手到高手的核心操作指南

1. 项目概述&#xff1a;为什么我们需要一个“常用命令合集”&#xff1f;在Linux世界里摸爬滚打十几年&#xff0c;我见过太多新手&#xff0c;也包括一些从其他平台转过来的老手&#xff0c;面对黑漆漆的终端窗口时那种手足无措的茫然。Linux的强大&#xff0c;根植于其命令行…...

Java 数组

Java 数组详细教程数组是 Java 中一种基本且重要的数据结构&#xff0c;用于存储固定大小的同类型元素的集合。所有元素在内存中是连续存储的&#xff0c;可以通过索引&#xff08;下标&#xff09;快速访问。1. 数组的基本概念元素&#xff1a; 数组中存储的每一个数据项。长度…...

EMD vs NEMD:分子动力学算热导率,新手到底该选哪个?

EMD与NEMD方法实战指南&#xff1a;如何为你的热导率计算选择最佳方案 在纳米材料和新型功能材料的研究中&#xff0c;热导率的精确计算是理解材料热输运性能的关键。面对平衡态分子动力学(EMD)和非平衡态分子动力学(NEMD)两种主流方法&#xff0c;许多研究者常常陷入选择困境。…...

Cadence 5141实战:手把手教你搞定Bandgap基准电压源电路(附完整仿真流程)

Cadence 5141实战&#xff1a;手把手教你搞定Bandgap基准电压源电路&#xff08;附完整仿真流程&#xff09; 在模拟集成电路设计中&#xff0c;基准电压源如同心脏般重要&#xff0c;而Bandgap电路则是这颗心脏的核心技术。无论你是微电子专业的学生&#xff0c;还是刚踏入模拟…...

深入浅出DPCM与DAPM:图解高通音频架构如何实现动态功耗管理与低延迟播放

深入浅出DPCM与DAPM&#xff1a;图解高通音频架构如何实现动态功耗管理与低延迟播放 在智能穿戴设备和移动终端领域&#xff0c;音频系统的功耗优化一直是工程师面临的重大挑战。想象一下&#xff0c;当你的智能手表在待机状态下播放通知铃声时&#xff0c;如果每次都需要唤醒主…...

手把手调试:用ADC0804读取PT100变送器信号,51单片机程序里的那些‘坑’怎么避?

51单片机实战&#xff1a;PT100温度检测系统避坑指南与ADC0804深度调试 当我们需要在工业控制或高精度测量场景中实现温度监控时&#xff0c;PT100铂电阻因其出色的线性度和稳定性成为首选传感器。然而&#xff0c;将PT100与51单片机结合使用时&#xff0c;从信号采集到温度显示…...