首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:使用地图工具对阿拉斯加进行缩放::elide

问R:使用地图工具对阿拉斯加进行缩放::elide
EN

Stack Overflow用户
提问于 2021-06-10 21:33:24
回答 1查看 103关注 0票数 0

我正在建立一个州的形状文件,在那里阿拉斯加和夏威夷被描绘成位于德克萨斯州南部的某个地方,以便于绘制一张说明性地图。通过使用maptools包和来自https://rud.is/b/2014/11/16/moving-the-earth-well-alaska-hawaii-with-r/的一些代码,我已经能够使用TIGER中的形状来完成这个任务。

然而,我现在遇到了麻烦,因为我想把城市添加到我的地图上。将我的形状制作成sp对象,然后使用maptools::elide以前在阿拉斯加很好,但是带比例的elide在集合点上的工作方式不一样,所以我的城市最终在错误的地方结束了:

代码语言:javascript
复制
library(maptools)
library(sf)
library(tmap)
library(tidyverse)
library(tidygeocoder)

  
ak_city_sf <-
  tribble(~city_name, ~city_search_string,
          "Juneau", "Juneau, Alaska, United States",
          "Anchorage", "Anchorage, Alaska, United States",
          "Utqiagvik", "Utqiagvik, Alaska, United States",
          "Scammon Bay", "Scammon Bay, Alaska, United States") %>%
  geocode(city_search_string, method = 'osm', lat = latitude , long = longitude) %>%
  st_as_sf(coords = c("longitude","latitude"))

st_crs(ak_city_sf) <- 4326

ak_city_sf <-
  ak_city_sf %>%
  st_transform(2163)
    
ak_state_sf <-
  tigris::states(cb = T) %>%
  filter(STUSPS == "AK") %>%
  st_transform(2163)

# before transformation, everything looks fine...

tm_shape(ak_state_sf) +
  tm_borders() +
  tm_shape(ak_city_sf) +
  tm_dots(size = .1) +
  tm_text("city_name",
          size = .5)

SCALE_FACTOR <- 10000


ak_state_sf_scaled <-
  ak_state_sf %>%
  as("Spatial") %>%
  elide(scale = SCALE_FACTOR) %>%
  st_as_sf()

st_crs(ak_state_sf_scaled) <- 2163

ak_city_sf_scaled <-
  ak_city_sf %>%
  as("Spatial") %>%
  elide(scale = SCALE_FACTOR) %>%
  st_as_sf()

st_crs(ak_city_sf_scaled) <- 2163
# after scaling, things don't look so good

tm_shape(ak_state_sf_scaled) +
  tm_borders() +
  tm_shape(ak_city_sf_scaled) +
  tm_dots(size = .1) +
  tm_text("city_name",
          size = .5)

maptools::elide似乎是执行此类操作的最佳命令(尽管它迫使我转换为sp对象)。关于比例的文件对我来说没什么意义。(我不认为我能把它们组合在一个单一的物体上,因为它们代表城市,多多边形代表国家)。我怎样才能像缩放状态那样按比例缩放点呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-14 20:35:02

若要缩放或旋转两个独立的几何图形,以便将它们映射到一起,有必要定义一个质心,即您的状态几何和城市几何图形都将被旋转或缩放。这具有一定的逻辑意义,因为除非您定义(隐式或显式)缩放或旋转的中心,否则不可能缩放或旋转点集合(在本例中代表城市)。

一旦定义了一个常见的质心(在我的例子中,我只是使用了我正在转换的状态的质心),您就可以使用如下所示的仿射变换:https://geocompr.robinlovelace.net/geometric-operations.html#affine-transformations。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67928681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档