首页 > 解决方案 > 计算相对于 XY 坐标的最近点

问题描述

我试图找到关于 X 和 Y 坐标的最近点,相对于他们自己的土地覆盖类别和区域。但是,我希望按照此图采用与通常最近点不同的替代方案,这样我就可以避免距离为 0。

图表

通常是两点 A 和 B 之间最近的点;然后我们将它们之间的距离用于 A 和 B。但是,我希望通过使用 A 和 B 之间最近的距离来解决这个问题,这样只有 A 或 B 具有该距离值,因此另一点选择下一个离它最近的距离,等等。

鉴于上图;假设 C 和 B 与 A 的距离相等,使得 C 和 B 之间的距离大于它们到 A 的距离,则选择到 A 的距离。

但是,我已经尝试过该功能nn2,但它并没有像提到的那样有效地间隔点,因为它会选择两点之间的距离,并将该距离用于两个点。有没有办法做到这一点?

输出可能如下所示:

    X      Y  year landcover pland_change encounter ly_name          distance   ID    points    
     <dbl>  <dbl> <int> <chr>            <dbl>     <dbl> <chr>         200       1      4
1  -7.62e6 5.86e6  2011 barren         -0.143     0.0253 Prairie_~      18       2      8
2  -7.22e6 5.86e6  2011 barren         -0.143     0.0392 Prairie_~      180      3      2
3  -7.22e6 5.86e6  2011 barren         -0.143     0.0392 Prairie_~      200      4      5
4  -7.39e6 5.86e6  2011 barren         -0.0556    0.0246 Prairie_~      100      5      7
5  -7.40e6 5.85e6  2011 barren         -0.0833    0.0608 Prairie_~      200      6      6
6  -7.70e6 5.85e6  2011 barren         -0.143     0.0297 Prairie_~      150      7      1

其中distance计算 中的点之间的距离km,并ID表示数据框中的每个唯一点,并points表示ID已映射到的值。

可重现的代码:

structure(list(X = c(-7615907.15123233, -7215137.15123233, -7215137.15123233, 
-7390337.15123233, -7399097.15123233, -7696937.15123233, -7438517.15123233, 
-7399097.15123233, -7655327.15123233, -7158197.15123233, -7534877.15123233, 
-7158197.15123233, -7383767.15123233, -7657517.15123233, -7661897.15123233, 
-7659707.15123233, -7469177.15123233, -7469177.15123233, -7322447.15123233, 
-7469177.15123233, -7664087.15123233, -7664087.15123233, -7712267.15123232, 
-7762637.15123232, -7710077.15123232, -7791107.15123232, -6897587.15123233, 
-7486697.15123233, -6915107.15123233, -6917297.15123233, -6926057.15123233, 
-6923867.15123233, -6921677.15123233, -6917297.15123233, -6919487.15123233, 
-6917297.15123233, -6921677.15123233, -7379387.15123233, -7431947.15123233, 
-7434137.15123233, -7563347.15123233, -7438517.15123233, -7436327.15123233, 
-7491077.15123233, -6928247.15123233, -6928247.15123233, -6930437.15123233, 
-7591817.15123233, -7587437.15123233, -7585247.15123233), Y = c(5862248.2876254, 
5862248.2876254, 5860168.2876254, 5858088.2876254, 5851848.2876254, 
5849768.2876254, 5845608.2876254, 5837288.2876254, 5831048.2876254, 
5814408.2876254, 5812328.2876254, 5812328.2876254, 5795688.2876254, 
5793608.2876254, 5791528.2876254, 5791528.2876254, 5789448.2876254, 
5787368.2876254, 5787368.2876254, 5785288.2876254, 5783208.2876254, 
5781128.2876254, 5754088.2876254, 5727048.2876254, 5727048.2876254, 
5712488.2876254, 5691688.2876254, 5677128.2876254, 5677128.2876254, 
5675048.2876254, 5666728.2876254, 5666728.2876254, 5666728.2876254, 
5658408.2876254, 5656328.2876254, 5654248.2876254, 5652168.2876254, 
5650088.2876254, 5641768.2876254, 5639688.2876254, 5637608.2876254, 
5633448.2876254, 5633448.2876254, 5625128.2876254, 5625128.2876254, 
5623048.2876254, 5620968.2876254, 5604328.2876254, 5604328.2876254, 
5604328.2876254), year = c(2011L, 2011L, 2011L, 2011L, 2011L, 
2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 
2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 
2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 
2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 
2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L
), landcover = c("barren", "barren", "barren", "barren", "barren", 
"barren", "barren", "barren", "barren", "barren", "barren", "barren", 
"barren", "barren", "barren", "barren", "barren", "barren", "barren", 
"barren", "barren", "barren", "barren", "barren", "barren", "barren", 
"barren", "barren", "barren", "barren", "barren", "barren", "barren", 
"barren", "barren", "barren", "barren", "barren", "barren", "barren", 
"barren", "barren", "barren", "barren", "barren", "barren", "barren", 
"barren", "barren", "barren"), pland_change = c(-0.142857149243355, 
-0.142857149243355, -0.142857149243355, -0.0555555559694767, 
-0.0833333358168602, -0.142857149243355, -0.100000001490116, 
-0.0909090936183929, -0.142857149243355, -0.0714285746216774, 
-0.25, -0.0714285746216774, -0.142857149243355, -0.111111111938953, 
-0.111111111938953, -0.111111111938953, -0.16666667163372, -0.25, 
-0.16666667163372, -0.25, -0.16666667163372, -0.16666667163372, 
-0.0833333358168602, -0.16666667163372, -0.200000002980232, -0.0833333358168602, 
-0.0714285746216774, -0.16666667163372, -0.16666667163372, -0.16666667163372, 
-0.142857149243355, -0.142857149243355, -0.142857149243355, -0.25, 
-0.25, -0.25, -0.125, -0.142857149243355, -0.111111111938953, 
-0.111111111938953, -0.125, -0.25, -0.125, -0.100000001490116, 
-0.25, -0.125, -0.142857149243355, -0.125, -0.16666667163372, 
-0.0666666701436043), encounter = c(0.0253428258001804, 0.0392075702548027, 
0.0392075702548027, 0.024617126211524, 0.0607607066631317, 0.0296789277344942, 
0.0201033502817154, 0.0209894124418497, 0.0282098408788443, 0.0349848158657551, 
0.0268693752586842, 0.0563336089253426, 0.036945529282093, 0.0309623349457979, 
0.0585363209247589, 0.0344486609101295, 0.0461014062166214, 0.0652390494942665, 
0.0118494974449277, 0.0565750412642956, 0.0135372998192906, 0.0245329532772303, 
0.0230230912566185, 0.0269634630531073, 0.0287500899285078, 0.0237087737768888, 
0.0222366657108068, 0.044706467539072, 0.0369599983096123, 0.0324387364089489, 
0.0607137344777584, 0.0607137344777584, 0.0287552513182163, 0.0309876725077629, 
0.0271823368966579, 0.0260571390390396, 0.0502644516527653, 0.0283330343663692, 
0.0202347375452518, 0.0247625224292278, 0.019514724612236, 0.0214884802699089, 
0.0190866030752659, 0.0576938390731812, 0.0110736573114991, 0.0114547843113542, 
0.0123803708702326, 0.036116398870945, 0.0347733832895756, 0.0433427914977074
), ly_name = c("Prairie_Potholes", "Prairie_Potholes", "Prairie_Potholes", 
"Prairie_Potholes", "Prairie_Potholes", "Prairie_Potholes", "Prairie_Potholes", 
"Prairie_Potholes", "Prairie_Potholes", "Prairie_Potholes", "Prairie_Potholes", 
"Prairie_Potholes", "Prairie_Potholes", "Prairie_Potholes", "Prairie_Potholes", 
"Prairie_Potholes", "Prairie_Potholes", "Prairie_Potholes", "Prairie_Potholes", 
"Prairie_Potholes", "Prairie_Potholes", "Prairie_Potholes", "Prairie_Potholes", 
"Prairie_Potholes", "Prairie_Potholes", "Prairie_Potholes", "Prairie_Potholes", 
"Prairie_Potholes", "Prairie_Potholes", "Prairie_Potholes", "Prairie_Potholes", 
"Prairie_Potholes", "Prairie_Potholes", "Prairie_Potholes", "Prairie_Potholes", 
"Prairie_Potholes", "Prairie_Potholes", "Prairie_Potholes", "Prairie_Potholes", 
"Prairie_Potholes", "Prairie_Potholes", "Prairie_Potholes", "Prairie_Potholes", 
"Prairie_Potholes", "Prairie_Potholes", "Prairie_Potholes", "Prairie_Potholes", 
"Prairie_Potholes", "Prairie_Potholes", "Prairie_Potholes")), row.names = c(NA, 
-50L), class = c("tbl_df", "tbl", "data.frame"))

标签: rgeometrycoordinatespolygonpoint

解决方案


推荐阅读