楼主: llb_321
3788 2

[程序分享] 【独家发布】梅登黑德定位系统与经纬度转换的R代码 [推广有奖]

  • 3关注
  • 49粉丝

教授VIP

学科带头人

10%

还不是VIP/贵宾

-

TA的文库  其他...

LATEX & R 模板和代码

威望
2
论坛币
18020 个
通用积分
1705.0386
学术水平
407 点
热心指数
416 点
信用等级
354 点
经验
1960 点
帖子
1417
精华
1
在线时间
1035 小时
注册时间
2010-6-18
最后登录
2023-8-18

初级热心勋章 初级信用勋章 中级热心勋章 中级信用勋章 初级学术勋章

楼主
llb_321 在职认证  发表于 2022-4-11 16:20:53 |只看作者 |坛友微信交流群|倒序 |AI写论文
相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
梅登黑德定位系统(Maidenhead Locator System)是业余无线电用于报告地理位置的网格定位系统。
1.将地球表面从西经180 度到东经180 度、从南纬90 度到北纬90 度,划分成18*18 个field,用AA ~RR 表示,第一个字母代表经度编码,第二个字母为纬度编码。
2.每个field 进一步划分为10*10 个square,用00~99 表示。
3.每个square 划分为24*24 个subsquare,用AA~XX 表示。
4.按顺序将field、square、subsquare 的编码组合,则具体位置所在的网格可以用六个字符表示,如本人所在的网格编码为PN44TO,该编码的第1、3、5 位由经度确定,第2、4、6 位由纬度确定。

maiden.PNG

这张图,为本人用ggplot2实现,不涉及图片版权,代码如下:

  1. library(ggplot2)
  2. library(maptools)
  3. library(sf)
  4. orig <-
  5.   st_read("worldmap.shp", stringsAsFactors = F)#导入shp数据
  6. text <- data.frame(
  7.   x = rep(seq(-170, 170, 20), 18),
  8.   y = rep(seq(-85, 85, 10), each = 18),
  9.   label = paste(rep(LETTERS[1:18], 18),
  10.                 rep(LETTERS[1:18], each =18)))
  11. ggplot(orig) +
  12.   geom_sf(aes(fill = `MAPCOLOR7`, geometry = `geometry`),
  13.           size = 0.2, color = "black") +
  14.   geom_hline(yintercept = seq(-90, 90, 10)) +
  15.   geom_vline(xintercept = seq(-180, 180, 20)) +
  16.   geom_text(data = text, aes(x, y, label = label),
  17.             color = "red", size = 3.5) +
  18.   coord_sf(xlim = c(-180, 180), ylim = c(-90, 90), expand = FALSE) +
  19.   theme(
  20.     panel.background = element_rect(fill = "lightblue",
  21.                                     colour = "black"),
  22.     legend.position = "none",
  23.     panel.grid = element_blank(),
  24.     axis.title = element_blank())
复制代码


下面,提供两个自定义函数,实现经纬度和网格定位的相互转换。
  1. #经纬度转网格定位,参数为经度的度、分、秒和纬度的度、分、秒
  2. #东经为正,西经为负,北纬为正,南纬为负
  3. toMLS <-
  4.   function (lonD = 129, lonM = 37, lonS = 27.17,
  5.             latD = 44, latM = 35, latS = 48.07) {
  6.     x <- round(lonD + lonM / 60 + lonS / 3600, 6)
  7.     if (x < -180 | x >= 180) print("经度错了吧?")
  8.     y <- round(latD + latM / 60 + latS / 3600, 6)
  9.     if (y < -90 | y >= 90) print("纬度错了吧?")
  10.     MLS <- paste(LETTERS[floor(x / 20 + 9) + 1],
  11.                  LETTERS[floor(y / 10 + 9) + 1],
  12.                  floor((x / 20 + 9 - floor(x / 20 + 9)) * 10),
  13.                  floor((y / 10 + 9 - floor(y / 10 + 9)) * 10),
  14.                  LETTERS[floor(((x / 20 + 9 - floor(x / 20 + 9)) * 10 - floor((
  15.                    x / 20 + 9 - floor(x / 20 + 9)
  16.                  ) * 10)) * 24) + 1],
  17.                  LETTERS[floor(((y / 10 + 9 - floor(y / 10 + 9)) * 10 - floor((
  18.                    y / 10 + 9 - floor(y / 10 + 9)
  19.                  ) * 10)) * 24) + 1],
  20.                  sep = "")
  21.     return(sprintf("Longitude:%06f; Latitude:%06f; MLS:%s",
  22.                    x,y,MLS))
  23.   }

  24. #网格定位转经纬度范围,参数为网格定位字符
  25. fromMLS <- function (MLS = "PN44TO") {
  26.   temp <- unlist(strsplit(MLS, split = ""))
  27.   x <-
  28.     -200 + which(LETTERS == temp[1]) * 20 +
  29.     as.integer(temp[3]) * 2 + which(LETTERS == temp[5]) / 12
  30.   y <-
  31.     -100 +  which(LETTERS == temp[2]) * 10 +
  32.     as.integer(temp[4]) + which(LETTERS == temp[6]) / 24
  33.   return(
  34.     sprintf(
  35.       "MLS:%s; Longitude:from %06f to %06f; Latitude:from %06f to %06f",
  36.       MLS, x - 1 / 12, x, y - 1 / 24, y))
  37. }

  38. #以本人位置为例,城市MDJ 的某个角落,网格定位编码为 PN44TO
  39. toMLS() #默认参数
  40. #[1] "Longitude:129.624214; Latitude:44.596686; MLS:PN44TO"

  41. fromMLS()#默认参数
  42. #[1] "MLS:PN44TO; Longitude:from 129.583333 to 129.666667; Latitude:from 44.583333 to 44.625000"
复制代码


上述代码经过专业验证无误,分享出来供无线电爱好者利用。


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:定位系统 经纬度 R代码 Library ggplot2 梅登黑德 定位系统 网格定位

已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Sunknownay + 3 + 3 + 3 鼓励积极发帖讨论

总评分: 学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

本帖被以下文库推荐

沙发
allain 在职认证  发表于 2022-4-11 17:24:27 |只看作者 |坛友微信交流群
这个有啥用?

使用道具

藤椅
llb_321 在职认证  发表于 2022-4-13 09:51:11 |只看作者 |坛友微信交流群
allain 发表于 2022-4-11 17:24
这个有啥用?
这是给业余无线电爱好者用的,K

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-1 03:24