【问题标题】:How do I convert the geometry of multipolygons to lat and long using r如何使用 r 将多面体的几何形状转换为纬度和经度
【发布时间】:2022-12-14 05:09:36
【问题描述】:

您好我正在尝试将几何字段转换为纬度和经度。我需要使用数据在传单中为闪亮的应用程序创建地图。

我尝试了以下代码:

  1. rl_coord <- rle %>% mutate(lat = unlist(map(rle$geometry, 1)), long = unlist(map(rle$geometry, 2)))

    输出:stopifnot() 中的错误: !计算 lat = unlist(map(rle$geometry, 1)) 时出现问题。 x lat 必须为 45152 或 1,而不是 19470112。 运行rlang::last_error()查看错误发生的地方。

    数据样本(前两行):

    (column names)
    oi, name, rle_status, percentage, geometry
    
    1, Aggeneys Gravel Vygieveld, Least Concern, 99, list(c(18.1286933451867, 18.1288873157412, 18.1285209659984, 18.1253701585106, 18.1256087808649, 18.125834301081, 18.1261614439592, 18.1263051557795, 18.1264605244489, 18.1266239843156, 18.1269636452865, 18.12730379009, 18.1274679032905, 18.1276242720226, 18.1277694335806, 18.128129283741, 18.1285605618558, 18.1286933451867, -29.2730674003889, -29.2731573351778, -29.273107503584, -29.273040061747, -29.2729443517532, -29.2728706490378, -29.2727512792674, -29.2727164322246, -29.2726934896327, -29.2726798052816,  -29.2726735519181, -29.2726912387301, -29.2727098853755, -29.2727368207384, -29.272774262715, -29.2728993661673, -29.2730186720589, -29.2730674003889)) 
    
    2,Aggeneys Gravel Vygieveld, Least Concern, 99, list(c(18.1537914281886, 18.1575870517462, 18.1606979380474, 18.1636028297453, 18.1655769358587, 18.16918945379, 18.1735477460181, 18.1759052286574, 18.1772384655054, 18.1773223880217, 18.1776390084706, 18.1759643559649, 18.1735973363743, 18.169952393675, 18.1688938146476, 18.1682070250338, 18.1683513617348, 18.1685030450031, 18.1688311043061, 18.1693585935878, 18.1702652749817, 18.1706158522373, 18.1709379223772, 18.1710792665481, 18.1712000947379, 18.1712925878997, 18.1713437767173, 18.1713693252922,  18.1713707328073, 18.1713479804211, 18.1713015143846, 18.1712382418641, 18.1709475315411, 18.1704635387361, 18.1684209356022, 18.1680682165722, 18.1678999593179, 18.1677395265964, 18.1675893883433, 18.1674634611086, 18.16651344333, 18.1637821201569, 18.1598033908529, 18.1569099426752, 18.1529178620954, 18.14891243025, 18.1454734808983, 18.141641617306, 18.1389141094622, 18.1363582617806, 18.1337413799508, 18.1329259143444, 18.1327123178834, 18.1321225427447, 18.1316307840128, 18.1308981359519, 18.130405823682,  18.1296760299562, 18.1295423948817, 18.1293256727083, 18.1291879582129, 18.1287509532673, 18.1283905796694, 18.1282495214403, 18.1280975604639, 18.1277725515827, 18.1267805933984, 18.1265024871873, 18.1263039910056, 18.1262050407897, 18.1261056638745, 18.1257711483693, 18.1254680798452, 18.1251343803712, 18.1237035930329, 18.1233520704461, 18.1230207288408, 18.1228686758013, 18.122730590917, 18.122428801227, 18.1222578827598, 18.1221962726986, 18.1221588093525, 18.1221453668644, 18.1221553763524,  18.1221897086251, 18.1222487087564, 18.1223573579371, 18.121940612864, 18.119729996386, 18.1201267241008, 18.1202602393336, 18.1232814790033, 18.1262264249677, 18.1309795388961, 18.1359252938222, 18.1414241797188, 18.1456203463775, 18.1505165109378, 18.1537914281886, -29.2714061489315, -29.2729282131844, -29.27283475266, -29.2735366562541, -29.2748603575312, -29.2763805135057, -29.2774333702504, -29.2781257379722, -29.2796611540815, -29.279758428048, -29.2815265405493, -29.282613729886, -29.2822437040154,  -29.2818450674144, -29.2814769494464, -29.2812386697835, -29.2812023081652, -29.2811798583234, -29.2811567953417, -29.2811519774458, -29.2811626612424, -29.2811582844914, -29.2811379726675, -29.2811178709109, -29.2810880943803, -29.2810455977044, -29.2809975064909, -29.2809446550115, -29.2808944231771, -29.2808543392358, -29.2808307426598, -29.2808240597577, -29.2808606799739, -29.2808810489644, -29.2808696770233, -29.2808822434794, -29.280895647919, -29.280916088344, -29.2809458790151, -29.2809806868257,  -29.2806510672722, -29.280271505169, -29.2787456264884, -29.2775611622045, -29.2765159357731, -29.2759494531304, -29.2747535453343, -29.2745113125779, -29.2739715327436, -29.2739181265728, -29.2737464650722, -29.2736922023781, -29.2736427340937, -29.2735310196154, -29.2733754030725, -29.2732322407442, -29.2730770705516, -29.2729311019628, -29.2728915355121, -29.2728078851028, -29.2727640339101, -29.2726519877553, -29.2725284230301, -29.2724913733567, -29.2724634517196, -29.2724256261332, -29.2723486672961,  -29.2723047868547, -29.2722601758286, -29.2722516909261, -29.2722563540645, -29.2723118485858, -29.2723331410326, -29.2723400722685, -29.272324458358, -29.2723303416353, -29.2723548747257, -29.2723790183498, -29.272414889976, -29.2725469760291, -29.2726412327055, -29.2726981781648, -29.2727653543012, -29.2728386599826, -29.2729125214399, -29.2729813861663, -29.2730411602367, -29.2731112309018, -29.2731265774833, -29.2737197621271, -29.2726058704699, -29.272533391812, -29.2709121456387, -29.2701740008779,  -29.2701167811391, -29.2697410330702, -29.2692184199776, -29.2694682832248, -29.2708549256421, -29.2714061489315))
    

【问题讨论】:

  • 您可以使用dput 来共享您的数据集,这可能会容易得多(而且不会出错)。
  • 你的 rle 对象的类是 sf 还是 sp?

标签: r coordinates sf


【解决方案1】:

您可以使用sf::st_coordinates(具有可重现的数据集)。您将获得每个多面体的 X 和 Y 坐标列表。然后,您可以使用 unnest 为每个 X Y 对获取一行。

library(spData)
library(sf)
data(nz)

nz %>% 
  transmute(lon = list(st_coordinates(.)[, 1]),
            lat = list(st_coordinates(.)[, 2])) %>% 
  unnest(lon, lat) %>% 
  st_drop_geometry()

输出

# A tibble: 19,056 × 2
        lon      lat
 *    <dbl>    <dbl>
 1 1745493. 6001802.
 2 1740539. 5995066.
 3 1733165. 5989714.
 4 1720197. 5980078.
 5 1709110. 5986672.
 6 1701512. 5996205.
 7 1694072. 5996670.
 8 1698473. 5988332.
 9 1703769. 5984809.
10 1706031. 5975136.
# … with 19,046 more rows

【讨论】:

    【解决方案2】:

    尝试这个

    rl_coord <- 
      rle %>%
      sf::st_coordinates() %>%
      as_tibble() %>%
      select("long" = X, "lat" = Y)
    
    rl_coord 
    

    【讨论】:

    • @Maël 怎么更短了?除了省略 sf:: 包限定符之外,您唯一不同的是没有将其分配给新变量,这可能是 OP 所要求的。不完全是一个更短但等效的方法。
    • 在此期间对其进行了编辑。原来的答案是不同的。
    猜你喜欢
    • 2022-11-28
    • 1970-01-01
    • 2021-10-19
    • 2014-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    相关资源
    最近更新 更多