我尝试手动构建一个边界框来裁剪sf对象。我使用角坐标st_polygon和st_sfc构建简单的多边形,然后将crs设置为我想要裁剪的对象。然而,一旦我使用st_intersection裁剪它,纬度线就会稍微向北弯曲。
我知道这和crs有关,但我无论如何也破解不了。
示例:
usa <-rnaturalearth::ne_states(country = c('united states of america'), returnclass = "sf")
lon <- c(-84, -75, -75, -84, -84); lat <- c(40, 40, 35, 35, 40)
pol <- st_polygon(list(cbind(lon, lat)))
pol <- st_sfc(pol, crs=st_crs(usa))
usa <- st_intersection(usa, pol)
ggplot2::ggplot()+
geom_sf(data=usa)
1条答案
按热度按时间gfttwv5a1#
一般来说,同一纬度上两点之间的直线 * 不是 * 沿着该纬度的直线。
当然,球面上不存在直线这种东西;最接近的等价物是 * 测地线 *,即两点都位于大圆上的一段。经度线已经是大圆,因此连接完全相同经度上的两点的线将始终具有相同的经度。纬度线不是这样的,因为它们不是 * 大圆(除了赤道本身)。
如果你在北方半球定义一个足够大的矩形,它的南北边将向北凸出,在南半球,它们将向南凸出。
如果您想要的是一个具有固定纬度和经度边界的区域,那么最好指定坐标,沿着每条边指定几个点,这些点与您想要的确切纬度一致: