如何识别坐标点到一条线的方向

问题描述

我需要计算一组点和一条特定线之间的最短距离,并确定所有点到这条线的方向。

从视觉上看,它是这样的: 蓝线表示具体线路。黑点代表 data.table 中的城市。 我需要找到每个点相对于蓝线的方向:是在南还是北?

enter image description here

地图可以来自gadm36_CHN_shp

china_map_city <- rgdal::readOGR(".../gadm36_CHN_shp/gadm36_CHN_0.shp",use_iconv = TRUE,encoding = "UTF-8") %>%
  rmapshaper::ms_simplify()




好的...现在,考虑一个简单的案例,有两个数据集

# data 1: the specific line
line_QH <- structure(
  c(120.85553,119.097961,118.881958,118.720215,118.071899,107.718445,107.263489,107.038696,106.805664,106.228394,106.076172,105.298462,105.045898,104.656494,104.313293,104.356018,104.190125,103.901672,103.536499,103.391479,103.178772,103.053833,102.727783,102.369141,102.292175,102.242859,101.742188,101.603149,101.261902,101.37738,101.110962,100.573059,99.984131,99.522827,99.161377,98.848755,98.713623,98.30249,97.725647,97.432373,97.513123,97.425354,97.414124,97.194336,96.803162,96.653564,96.239746,96.013123,95.752869,95.117554,94.685913,94.127991,93.586121,91.132019,90.49884,89.984924,89.81665,89.533264,89.566956,89.457825,89.172485,87.809143,86.641785,85.723511,85.306396,84.101685,83.470276,82.929993,82.289795,82.058105,81.575012,81.050537,80.276123,80.106506,79.853943,79.58313,79.032227,33.002075,32.450989,32.957642,32.817261,33.146362,32.322021,32.474304,32.495605,32.696472,32.679138,32.759399,32.639954,32.641296,32.67688,32.833984,33.184204,33.517761,33.681458,33.677002,33.744812,33.815857,34.175781,34.21228,34.031433,33.713318,33.349243,33.250244,33.531799,33.671753,33.154724,32.917358,32.587158,32.861694,32.728821,33.053528,33.217224,33.530518,33.856995,34.006836,33.743225,33.145508,32.545105,32.315918,32.099182,31.912415,31.736206,31.93042,31.718384,31.761292,32.268372,32.626282,32.441528,32.472107,33.202515,33.251099,33.71991,34.500061,35.282593,35.846008,36.153809,36.226196,36.364563,36.212952,35.726562,35.770752,35.360474,35.399841,35.576965,35.650635,35.438782,35.245422,35.386414,35.212402,35.049377,34.855347,34.686584,34.333313),.Dim = c(77L,2L),.Dimnames = list(NULL,c("long","lat")))

# data 2: a simplified data.table that contains the centoird for each city.
LatLon_ad4 <- structure(list(ad4 = c("1404","1405","1406","1407","1408","4203","4205","4206","4207","4208"),latW = c(36.203361,35.491546,39.330639,37.686307,35.027401,32.63122,30.694427,32.011398,30.395263,31.037631),lonW = c(113.116422,112.845429,112.426381,112.746207,111.001265,110.793338,111.282676,112.115983,114.886585,112.193188)),row.names = c(NA,-10L),class = c("data.table","data.frame") )

我的思路如下:

第一步,我计算了每个城市到这条线的最短距离

pts <- LatLon_ad4[,.(lonW,latW)] %>% as.matrix()
LatLon_ad4$dist <- dist2Line(pts,line_QH)[,1]/10^3

第 2 步,找出每个点到线的方向。但是怎么……???我不知道如何继续。

我的问题是,如何找出每个城市(LatLon_ad4$ad4)相对于线(line_QH)的方向:哪个城市在line_QH,即在线下方(上方)。

生成一个将方向标识为 LatLon_ad4 的新变量,如果城市在南方,则取值为 1,否则取值为 -1。

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)