R については何も知りませんが、PostGIS を使用した解決策を 1 つ提供します。PostGIS にデータをロードして、R だけを使用するよりも高速に処理できる場合があります。
2 つのテーブルplanet_osm_point
(80k 行) とplanet_osm_polygon
(30k 行) がある場合、次のクエリは約 30 秒で実行されます。
create table knn as
select
pt.osm_id point_osm_id,
poly.osm_id poly_osm_id
from planet_osm_point pt, planet_osm_polygon poly
where poly.osm_id = (
select p2.osm_id
from planet_osm_polygon p2
order by pt.way <-> p2.way limit 1
);
結果は、ポイントとポリゴンのバウンディング ボックスの中心点 (ポリゴン自体の中心点ではありません)との間の距離に基づく近似値です。もう少し作業を行うと、このクエリは、ポリゴン自体の中心点に基づいて最も近いポリゴンを取得するように適応させることができますが、実行速度は遅くなります。