r - 计算相对于 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"))
解决方案
推荐阅读
- python - 获得 model.docvecs.similarity_unseen_docs(document_1, document_2) 的负分
- python - 如何提取图像的噪声分布并将其应用于另一张图像?
- python - 将 n 个列表有效地扩展在一起
- javascript - 如何在 React 中为 styleguidist 渲染 .md 文件中的两个组件?
- go - 在 Golang 中解组 Protobuf ( proto2 ) 后如何设置可选参数?
- sql - 根据起始系列验证现有手机号码
- reactjs - 我可以对包装在 HOC 中的组件进行 typescript props 验证吗?
- android - 如何创建包含 3 个连续问号字符的 TODO 模式?
- java - 读取 InputStream 字节并写入 ByteArrayOutputStream
- laravel - 如何使用 Burp 工具阻止 Laravel 请求被操纵?