当我试图将旋转和转换应用于一个矩形,然后在leaflet上将两者可视化时,我遇到了一个问题。我试图旋转我的长方形180°,然后向下平移它。
问题是,经过这一转换后,新的矩形似乎扭曲(沿y轴更大),尽管它应该是相同的大小。
在这里,我已经复制了我的代码和结果的照片。我会感谢你的任何见解。
library(sf)
library(leaflet)
rect <- rbind(c(-1, -5), c(1, -5), c(1, 5), c(-1, 5), c(-1, -5))
rect_poly<- st_polygon(list(rect))
angle <- pi
rotation_matrix <- matrix(c(cos(angle), sin(angle), -sin(angle), cos(angle)), 2, 2)
rect_rot<- st_polygon(list(rect))*rotation_matrix + c(0, -50)
leaflet() %>%
addPolygons(data = rect_poly) %>%
addPolygons(data = rect_rot)

发布于 2021-03-24 17:43:30
这取决于投影系统 leaflet使用的。
如果使用简单的笛卡尔CRS,就不会出现扭曲:
leaflet(options = leafletOptions(crs = leafletCRS(crsClass = "L.CRS.Simple"))) %>%
addPolygons(data = rect_poly) %>%
addPolygons(data = rect_rot)

发布于 2021-03-24 17:13:51
它确实“看起来”拉长。但这与你的轮换无关。例如,如果将它们放在一起,它们的长度是相同的:
library(sf)
library(leaflet)
rect <- rbind(c(-1, -5), c(1, -5), c(1, 5), c(-1, 5), c(-1, -5))
rect_poly<- st_polygon(list(rect))
angle <- pi
rotation_matrix <- matrix(c(cos(angle), sin(angle), -sin(angle), cos(angle)), 2, 2)
rect_rot<- st_polygon(list(rect %*% rotation_matrix)) + c(4, 0)
leaflet() %>%
addPolygons(data = rect_poly) %>%
addPolygons(data = rect_rot)

也许这是一些传单问题,超出了我的经验。
注:旋转应该是矩阵乘以,而不是元素乘以。
https://stackoverflow.com/questions/66785779
复制相似问题