タグ付けされた質問 「nearest-neighbor」

出力ラスターの各セルの値が入力ラスターの最も近いセルの値を使用して計算される、ラスターデータをリサンプリングする手法。

1
GISTインデックスを使用したPostgis 2.0の最近傍の問題(<->関数)
テーブル(cosn1)の各行について、同じクラスの最も近いポリゴンまでの距離を計算するために、Postgis 2.0の新しい関数&lt;-&gt;(ジオメトリ距離重心)を使用しようとしています。 私は次のコードを使用しようとしました: WITH index_query AS ( SELECT g1.gid As ref_gid, ST_Distance(g1.the_geom,g2.the_geom) As ENN FROM "cosn1" As g1, "cosn1" As g2 WHERE g1.gid &lt;&gt; g2.gid AND g1.class = g2.class ORDER BY g1.gid, g1.the_geom &lt;-&gt; g2.the_geom) SELECT DISTINCT ON (ref_gid) ref_gid, ENN FROM index_query ORDER BY ref_gid, ENN; しかし、私は警告を実現します: 注:インデックスは、ジオメトリの1つが定数(サブクエリ/ cteではない)である場合にのみ有効です。例: …

4
ST_Distance、kNNを使用したPostGIS最近傍点
1つのテーブルの各要素で、別のテーブルの最も近いポイントを取得する必要があります。最初のテーブルには交通標識が含まれ、2番目のテーブルには町のエントランスホールが含まれます。問題は、ST_ClosestPoint関数を使用できないことと、ST_Distance関数を使用してmin(ST_distance)レコードを取得する必要があることですが、クエリの構築が非常に困難です。 CREATE TABLE traffic_signs ( id numeric(8,0) ), "GEOMETRY" geometry, CONSTRAINT traffic_signs_pkey PRIMARY KEY (id), CONSTRAINT traffic_signs_id_key UNIQUE (id) ) WITH ( OIDS=TRUE ); CREATE TABLE entrance_halls ( id numeric(8,0) ), "GEOMETRY" geometry, CONSTRAINT entrance_halls_pkey PRIMARY KEY (id), CONSTRAINT entrance_halls_id_key UNIQUE (id) ) WITH ( OIDS=TRUE ); すべてのtraffic_signの最も近いentrnce_hallのIDを取得する必要があります。 これまでの私のクエリ: SELECT …

3
最近点を見つけるアルゴリズム
数百の都市とその緯度/経度のリストがあります。別の場所(緯度/経度)がある場合、最も近い都市を見つける必要があります。 私はGISを使用していないので、今では明らかなアルゴリズムはすべての都市に対してループを作成し、ポイント間の距離を計算することです。 ループを作成することは私にとって実用的ですが、それをより効率的に達成するためのアルゴリズムを実装するのは簡単ですか?それとも、それを解決するのに役立つ軽いJavaライブラリですか? 注:完全なGISソリューションや重い/複雑なライブラリは必要ありません。私が解決する必要があるのはそれだけであるため、あまり良くはないが最も簡単で軽いソリューションを好む。

1
shapelyを使用して、ポイントに最も近いラインセグメントを検索しますか?
バックグラウンド 既知のポイントから、図に示されているように、MultiLineStringのテーブルに対して最も近い周囲の「見える境界」を確立する必要があります。 私はこのサイトをいくつかの用語(例:最小エッジ、最小周囲、最近傍、クリップ、ポリゴンを含む、可視性、スナップ、カットノード、レイトレース、フラッドフィル、内部境界、ルーティング、凹型ハル)で検索しました。このシナリオに一致すると思われる以前の質問を見つけることができません。 図 緑の円は既知のポイントです。 黒い線は、既知のMultiLineStringです。 灰色の線は、既知のポイントからの放射状の掃引を示しています。 赤い点は、放射状スイープとMultiLineStringsの最も近い交点です。 パラメーター PointはMultiLineStringと交差しません。 Pointは常にMultiLineStrings内の名目上中央に配置されます。 MultiLineStringはPointを完全に囲むことはないため、境界線はMultiLineStringになります。 約1,000個のMultiLineStringを含むテーブルがあります(通常は約100ポイントの単一行を含みます)。 考慮される方法論 既知のポイントから一連の線を構築することにより、放射状スイープを実行します(たとえば、1度の増分で)。 MultiLineStringを使用して、各放射状スイープラインの最も近い交点を確立します。 放射状スイープラインの1つがMultiLineStringのいずれとも交差しない場合、これは、MultiLineStringの周囲構造に収まる周囲のギャップを示します。 概要 この手法は最も近い交差点を検出しますが、放射状スイープの解像度に応じて、必ずしもすべての最も近い境界ノードポイントを検出するわけではありません。誰もがすべての周辺ポイントを確立するための代替方法を推奨したり、何らかの形のバッファリング、セクター化またはオフセットでラジアルスイープテクニックを補完できますか? ソフトウェア 私は、SpatiaLiteやShapelyをソリューションに使用することを好みますが、オープンソースソフトウェアを使用して実装できる提案を歓迎します。 編集:実用的なソリューション(@geneの回答に基づく) from shapely.geometry import Point, LineString, mapping, shape from shapely.ops import cascaded_union from shapely import affinity import fiona sweep_res = 10 # sweep resolution (degrees) focal_pt = Point(0, 0) …

3
SQL Server 2008の7000万点のクラウドで最近傍クエリを最適化する
SQL Server 2008 R2 Expressデータベースには約7,500万件のレコードがあります。それぞれは、ある値に対応する緯度経度です。テーブルにはgeography列があります。特定の緯度経度(ポイント)の最も近い隣人を見つけようとしています。既に空間インデックスを使用したクエリがあります。ただし、レコードがデータベース内のどこにあるか、たとえば第1四半期または最後の四半期に応じて、クエリは3〜30秒で最も近い隣を見つけることができます。これは、クエリまたは空間インデックスを最適化することで、より高速な結果を得るために最適化できると思います。現在、デフォルト設定でいくつかの空間インデックスを適用しています。これが私のテーブルとクエリの外観です。 CREATE TABLE lidar( [id] [bigint] IDENTITY(1,1) NOT NULL, [POINTID] [int] NOT NULL, [GRID_CODE] [numeric](17, 8) NULL, [geom] [geography] NULL, CONSTRAINT [PK_lidar_1] PRIMARY KEY CLUSTERED ([id] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) …

3
ArcGISで最近傍画像のリサンプリングはどのように機能しますか?
ArcGISで画像データセットのリサンプリングの最近傍がどのように機能するかを理解しようとしています。 出力ラスタセル値は、入力ラスタの最も近いセル値の値です。 この場合、各出力セルの中心は、各3x3入力セルの中央のセルです。 それらがすべて同じ距離にある場合はどうなりますか?出力の大きさが入力の半分である場合、出力の中心は、最も近い4つの入力セルまでの距離が同じになりますか? InRas1=6x6 OutRas=3x3 彼はセル値の大部分を取得しますか? 番号 または、私はここに何かが欠けていますか?

6
PostGIS:レイヤーAのポイントのIDをレイヤーBの最も近いポイントに割り当てます
これは、他の質問に対する明確な前兆であったはずです(質問しませんでした )。PostGISでスパイダーダイアグラム(ハブライン)を作成する方法は? レイヤーAのポイント(店舗)とレイヤーBのポイント(顧客)の関係がわからない場合は、一般的に「顧客1は最寄りの店舗からサービスを受けています」と言いたいと思います。私はこの事実が真実ではないかもしれないことを理解していますが、それはまともな代理になる可能性があります。 PostGISを使用して、レイヤーA(店舗)の最も近いポイントのIDをレイヤーB(顧客)の各ポイントに割り当てる最も効率的な方法は何ですか。私が探している出力は以下のようなものです。 Customer | Store 1 | A 2 | A 3 | B 4 | C

3
PostGISを使用した最近傍計算の最適化
PostGISを使用して、ポリゴンの最近傍を計算しています。計算したいのは、各ポリゴンから最も近いポリゴンまでの最小距離です。 これまでのところ、マイク・トゥウズの答え(小さな変更を引用)から大きな助けを得ました。 SELECT a.hgt AS a_hgt, b.hgt AS b_hgt, ST_Distance(a.the_geom, b.the_geom) AS distance_between_a_and_b FROM public."TestArea" AS a, public."TestArea" AS b WHERE a.hgt != b.hgt AND ST_Distance(a.the_geom, b.the_geom) &lt; 400 次に、最小値を計算しました: SELECT a_hgt, MIN(distance_between_a_and_b) FROM public."lon_TestArea" GROUP BY a_hgt ただし、私の挑戦は、多数のポリゴン(1,000,000)についてこれを計算することです。上記の計算では、各ポリゴンを他のすべてのポリゴンと比較しているので、10 ^ 12の計算を実行する必要がないように計算を改善する方法を考えました。 私が考えていたのは、各ポリゴンをバッファリングしてから、そのポリゴンのバッファ内のすべての値の最近傍を計算し、最小値を記録することでした。それが最善のアプローチであるか、PostGISに使用すべき関数があるかどうかはわかりません。 編集:ニックラスの提案のいずれかを使用して、私は実験していST_Dwithin()ます: CREATE TABLE mytable_withinRange AS SELECT a.hgt AS …

2
入力緯度経度に最も近い緯度経度を検索する(SQL Server 2008)
データベース(SQL Server 2008空間)に点群があります。これは約600万件のレコードです。3つの列があります:id、value、geom。入力緯度経度で「値」を取得する最適な方法は何ですか? SQL Server 2008の空間クエリは初めてです。誰かがgeom列のポイントを見つける簡単な例を投稿できますか。

2
パスに沿ったポリゴンとポイント間の距離を計算する
私はArcGisに非常に慣れていないため、これを行う方法を理解しようとしています。 基本的に、これは私がやろうとしていることです: 私はカナダの地図を持っており、その中には地域を表すポリゴンがあります(それぞれ自治体の大きさについて)。また、カナダのすべての空港の場所と、カナダ全土の道路網についても説明しています。道路を利用して、各エリアから最寄りの空港までの距離を求めます。 道路に沿った2点間の距離を計算するためにそれを使用できると思ったので、私がすでにやろうとしたのは、各ポリゴンの重心を見つけることでした。しかし、重心が道路(特にカナダ北部)に接続されているとは限らないため、それを使用できないことに気付きました。 ArcGISを使い始めて間もないので、オンラインで(混乱させることなく)私を助けることができなかったので、これをどのように達成するかについて、何らかのガイダンスを本当に感謝します。

1
日付変更線上の最も近い点を効率的に見つける方法は?
数十万のPostGIS POINTを持つPostgreSQL 9.1テーブルがあります。これらのそれぞれについて、POINTの別のテーブルで最も近いポイントを見つけたいと思います。2番目の表の点は、全世界のグリッドを表しています。そのため、常に1度以内で一致することがわかります。これは、これまでに使用したクエリで、GISTインデックスを使用しているため、かなり高速です(合計約30秒)。 SELECT DISTINCT ON (p.id) p.id, ST_AsText(p.pos) , ST_AsText(first_value(g.location) OVER (PARTITION BY p.id ORDER BY ST_Distance(p.pos, g.location::geography))) FROM point p JOIN grid g ON ST_DWithin(p.pos::geometry, g.location, 1) 唯一の問題は日付変更線です。グリッドポイントの緯度は180度のみで、-180ではありません。ST_Distanceのジオメトリバージョンを使用する場合、これは日付変更線の反対側のポイントを返しません。例えば。p.posがPOINT(-179.88056 -16.68833)最も近いグリッドポイントである可能性がありますPOINT(180 -16.25)が、上記のクエリはそれを返しません。これを修正する最良の方法は何ですか? 1つのグリッドポイントに2つの座標(-180と+180)を使いたくありません。この特定のケースをチェックする独自の関数を追加しようとしましたが、おそらくインデックスを使用できなくなったため、クエリが5分で返されません。ST_DWithinの地理バージョンも使用してみましたが、そのクエリも5分後に返さ​​れませんでした。

4
SpatiaLiteでポイントの位置を持つ2つのテーブル間の最近傍を検索しますか?
今日SpatiaLiteを使い始めて、すでに問題に遭遇しました。 tableOneに保存されている各ポイントの場所について、tableTwoから最も近い(直線距離)ポイントを1つ選択します。 これまでのところ、VIEWを利用する不器用なソリューションを思い付きました。 CREATE VIEW testview AS SELECT A.id , B.myValue, Distance(A.Geometry, B.Geometry) AS distance FROM tableOne AS A, tableTwo AS B WHERE distance &lt; 10000 ORDER BY A.Id, distance; その後: SELECT * FROM testview WHERE distance = (SELECT MIN(distance) FROM testview AS t WHERE t.id = testview.id) 仕事をするようです。 2つの質問: …

1
PostGISを使用して2点を与えられた最も近い線を見つけますか?
line_positions行タイプの列を含むテーブルtがあります。2つのポイントを考えて、十分に近い(10 km未満)と、避けたいポイント(最小20km)に近すぎない最も近いラインを見つけます。現在使用しています SELECT t.* FROM path t WHERE ST_DWithin(ST_GeographyFromText('Point(69.835 22.596)'), t.line_positions, 10000, FALSE) AND ST_DWithin(ST_GeographyFromText('Point(69.856 22.519)'), t.line_positions, 10000, false) AND NOT ST_DWithin(ST_GeographyFromText('Point(-79.804 9.141)'), t.line_positions, 20000, false) ORDER BY ST_Distance(ST_GeographyFromText('Point(69.835 22.576)'), t.line_positions, false) + ST_Distance(ST_GeographyFromText('Point(69.856 22.519)'), t.line_positions, false) ASC LIMIT 1 ix_path_line_positionsline_positions列に要旨インデックスがあります。 それは動作しますが、3秒から30秒の間で、tの100,000行だけで遅くなります。 分析は与える説明: Limit (cost=9.95..9.95 rows=1 width=1432) (actual time=21729.253..21729.254 rows=1 …

1
RのSpatialPointsDataFrameと同じすべてのポイントの最も近いポイントまでの距離
Rで使用しているSpatialPointsDataFrameがあります。すべてのポイントについて、SpatialPointsDataFrame内の最も近い他のポイントまでの距離を含む新しいベクトルをデータフレームに追加します。spdepパッケージのknearneighと、spパッケージのspDistsN1およびspDistsを確認しましたが、どちらも希望どおりのものを提供しません。明確にするために、これらのポイントはすべて1つのSpatialPointsDataFrameにあります。

3
Rでの1年あたりの空間ラグの計算
現時点では、で空間ラグを計算するのにいくつか問題がありますR。スペース全体の形式でラグを計算する方法を知っていますが、長い形式で計算することはできません。つまり、分析単位の観測を繰り返しています。 以下は、私が何をしようとしているのかを説明するための模擬データです。まず、興味のあるイベントの観測を生成します。 # Create observations pts&lt;-cbind(set.seed(2014),x=runif(30,1,5),y=runif(30,1,5), time=sample(1:5,30,replace=T)) require(sp) pts&lt;-SpatialPoints(pts) xおよびyは、timeイベントが発生する期間を表す座標です。イベントは、分析の単位であるポリゴンに集約する必要があります。この例では、ポリゴンはグリッドセルであり、簡単にするために、境界は時間の経過とともに固定されます。 # Observations take place in different areas; create polygons for areas X&lt;-c(rep(1,5),rep(2,5),rep(3,5),rep(4,5),rep(5,5)) Y&lt;-c(rep(seq(1,5,1),5)) df&lt;-data.frame(X,Y) df$cell&lt;-1:nrow(df) # Grid-cell identifier require(raster) coordinates(df)&lt;-~X+Y rast&lt;-raster(extent(df),ncol=5,nrow=5) grid&lt;-rasterize(df,rast,df$cell,FUN=max) grid&lt;-rasterToPolygons(grid) # Create polygons 分布の概要を取得するためだけにデータをプロットできます。 スペース全体のフォーマットでは、次の方法で空間ラグを計算します。 pointsincell=over(SpatialPolygons(grid@polygons),SpatialPoints(pts), returnList=TRUE) grid$totalcount&lt;-unlist(lapply(pointsincell,length)) require(spdep) neigh&lt;-poly2nb(grid) # Create neighbour list weights&lt;-nb2listw(neigh,style="B",zero.policy=TRUE) # Create …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.