如何从经纬度距离矩阵中提取行列偏移的指定距离值?
按规则从距离矩阵提取特定值
问题描述
我拥有一组包含纬度(latitude)和经度(longitude)的坐标数据,已计算出每个观测点到第一个起始点的距离,得到了可转换为data frame的距离矩阵。现在需要从该矩阵中提取一组特定的距离值,提取规则为:第1行第V1列、第2行第V1列、第3行第V2列、第4行第V3列、第5行第V4列……以此类推,最终得到8个观测值,第一个值为起始点的0,后续为对应偏移位置的距离。
解决方案
可以通过生成对应行和列的索引来精准提取目标值,以下是R语言实现代码:
# 假设距离矩阵存储为 dist_matrix row_indices <- 1:8 # 目标行索引(共8行) # 生成目标列索引:前2行取第1列,第3行及以后列索引 = 行索引 - 1 col_indices <- ifelse(row_indices <= 2, 1, row_indices - 1) # 提取对应位置的值 extracted_values <- dist_matrix[row_indices, col_indices] # 为提取结果命名(可选) names(extracted_values) <- paste0("观测值_", 1:8) # 查看结果 extracted_values
根据提供的距离矩阵,执行上述代码后得到的提取结果为:
- 观测值_1: 0.0000
- 观测值_2: 1.21866
- 观测值_3: 87.07661
- 观测值_4: 159.368
- 观测值_5: 205.100
- 观测值_6: 322.563
- 观测值_7: 308.865
- 观测值_8: 175.726
原始数据
structure(list(latitude = c(38.4839693048603, 38.4839676888751, 38.484000841, 38.4840256406904, 38.4842629760156, 38.4849478163079 ), longitude = c(-123.055495022123, -123.055491287216, -123.055793254511, -123.056350426841, -123.05700151085, -123.057715977783)), row.names = c(NA, 6L), class = "data.frame")
英尺单位距离矩阵
structure(list(V1 = structure(c(0, 1.21865987279359, 85.9395893412895, 245.140367411948, 443.345616384121, 727.792251173584), units = structure(list( numerator = "ft", denominator = character(0)), class = "symbolic_units"), class = "units"), V2 = structure(c(1.21865987279359, 0, 87.076605103043, 246.25311887669, 444.523156907811, 729.010874767996), units = structure(list( numerator = "ft", denominator = character(0)), class = "symbolic_units"), class = "units"), V3 = structure(c(85.9395893412895, 87.076605103043, 0, 159.368289208323, 358.047418709711, 648.709228910322), units = structure(list( numerator = "ft", denominator = character(0)), class = "symbolic_units"), class = "units"), V4 = structure(c(245.140367411948, 246.25311887669, 159.368289208323, 0, 205.10072777621, 515.020408170641), units = structure(list( numerator = "ft", denominator = character(0)), class = "symbolic_units"), class = "units"), V5 = structure(c(443.345616384121, 444.523156907811, 358.047418709711, 205.10072777621, 0, 322.563054256646), units = structure(list( numerator = "ft", denominator = character(0)), class = "symbolic_units"), class = "units"), V6 = structure(c(727.792251173584, 729.010874767996, 648.709228910322, 515.020408170641, 322.563054256646, 0), units = structure(list( numerator = "ft", denominator = character(0)), class = "symbolic_units"), class = "units"), V7 = structure(c(1018.50792414677, 1019.71647638936, 943.971774385934, 819.591063850584, 631.321251450188, 308.865461805431), units = structure(list( numerator = "ft", denominator = character(0)), class = "symbolic_units"), class = "units"), V8 = structure(c(1191.19804190322, 1192.4014434649, 1117.85419293343, 995.173866175853, 806.723702197458, 484.163222522177), units = structure(list( numerator = "ft", denominator = character(0)), class = "symbolic_units"), class = "units")), row.names = c(NA, 6L), class = "data.frame")
距离矩阵表格
| V1 | V2 | V3 | V4 | V5 | V6 | V7 | V8 |
|---|---|---|---|---|---|---|---|
| 0.0000 | 1.21866 | 85.93959 | 245.1404 | 443.3426 | 727.7923 | 1018.5079 | 1191.1980 |
| 1.21866 | 0.0000 | 87.07661 | 246.2531 | 444.5232 | 729.0109 | 1019.7165 | 1192.4014 |
| 85.93959 | 87.07661 | 0.0000 | 159.3683 | 358.0474 | 648.7092 | 943.9718 | 1117.8542 |
| 245.14037 | 246.253 | 159.368 | 0.0000 | 205.100 | 515.024 | 819.591 | 995.1739 |
| 443.345 | 444.523 | 358.047 | 205.100 | 0.0000 | 322.563 | 631.321 | 806.723 |
| 727.792 | 729.010 | 648.709 | 515.020 | 322.563 | 0.0000 | 308.865 | 484.163 |
| 1018.507 | 1019.716 | 943.971 | 819.591 | 631.321 | 308.865 | 0.0000 | 175.726 |
| 1191.1198 | 1192.401 | 1117.854 | 995.173 | 806.723 | 484.1632 | 175.726 | 0.0000 |
内容的提问来源于stack exchange,提问作者Brittany Poling
相关产品推荐
相关产品推荐

