微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用tmap保存有关从点到点移动的路径的信息

如何解决使用tmap保存有关从点到点移动的路径的信息

如果您能帮助我解决以下问题,我将不胜感激。我有一张美国县的地图,每个县都有自己的特征,比如土壤电导率。然后我有源和信号接收器的坐标。我需要做的是测量从我的源到接收器的距离,并保存有关距离和我的信号在每个县通过的信息。例如,我的源在A县,我的接收器在B县,所以我需要保存它经过A县的距离和经过B县的距离。它经过的县数可能超过2个。我已经构建了地图并将我的源和接收器的坐标放在上面。

library(sf)
library(tmap)
county_map <- st_read("cty_1930_gis.shp")
qtm(county_map,fill = "cndctmn")
tm_shape(county_map) + tm_polygons(alpha = 0.2,legend.show = FALSE) + tm_shape(stations1) + tm_bubbles(col = "red",size=0.02) + tm_basemap(server = c('OpenStreetMap'))

县地图的导电性

enter image description here

我的来源和我的接收者在地图上

enter image description here

根据我在地图上的边界,我应该使用什么函数来计算我的信号在每个县移动的距离?

解决方法

这是一个 sf 问题,而不是一个 tmap 问题。

这是我推荐的方法:

  1. 使用 sf 创建从起点(源)到终点(接收方)的空间线。确保使用能够很好地近似距离的地图投影 (crs)(因此不要使用 mercator/wgs84)。
  2. 使用带有两个参数的 sf::st_intersection:您刚刚创建的线和空间多边形。
  3. 结果已经告诉您信号经过了哪些县。
  4. 使用 st::st_distance 测量每个相交部分的距离。

不确定您是否已经熟悉 sf。如果不是,则有很多 SO 主题涵盖了这些步骤之一的详细信息。

,

这是用 Python 回答我的问题的代码,以防有人想使用它

import geopandas
from geopandas import GeoSeries
from shapely.geometry import LineString

data = geopandas.read_file('cty_1930_gis.shp')
data = data.to_crs(epsg=4326)
line = LineString([(lon_x,lat_x),(lon_y,lat_y)])
intersections = map_data.intersection(line)
intersections = intersections[~intersections.is_empty]
intersections = intersections.to_crs(epsg=3815)
lengths = intersections.length

然后在所有感兴趣的点上编写一个向量函数循环。 (当然,选择正确的 epsg 代码很重要)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。