为什么不使用数字坐标而不是 sf object=POINT?

Why not using numeric coordinates instead of sf object=POINT?

我想在地图上显示点。这些点表示为坐标 (long/lat) 并作为数字存储在数据框中。我想知道我是否真的需要将数字坐标 (lon/lat) 转换为 POINT 类型的 sf 对象。我不知道这种转换有什么好处。在此示例中,我使用 2 列的数字坐标并将它们显示在地图上:

data(quakes)

leaflet(data = quakes[1:20,]) %>% addTiles() %>%
  addMarkers(~long, ~lat)

这里的数据框(地震)不是空间的,lon/lat是数字的。但是,我可以将数字坐标转换为 sf POINT,然后在地图上显示它们:

coords <- quakes %>%
  sf::st_as_sf(coords = c("long","lat"), crs = 4326) %>%
  sf::st_geometry()

leaflet(data = coords[1:20,]) %>% addTiles() %>%
  addMarkers()

问题是:如果在地图上显示点(标记)——我们应该先转换为空间对象还是只使用数字列?如果我可以使用数字 lon/lat 做完全相同的事情,那么使用 POINT 有什么意义呢?性能问题?

您不需要转换,如果您的空间对象的唯一目的是绘制 {leaflet} 地图 - 即您没有进行其他计算、统计、建模等 - 没有什么意义在转型中。

{leaflet} documentation 对支持的数据类型非常直接 - {sf} 对象,{sp} 对象和常规纬度/经度 data.frames。

使用其中一种特殊空间格式的唯一(非常小)好处是您无需在 addMarker() 调用中指定纬度和经度映射。我不希望对性能有任何影响。

请注意,虽然 {leaflet} 支持多种数据输入方式,但它无法处理投影坐标系(东向和北向)中的数据。