問題タブ [spatial]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
db2 - 空間SQL:正方形に最も適したデータ型?
空間的に有効なデータベース(この場合はDB2)があります。テーブルにたくさんの正方形を格納する必要があります。どの標準空間SQLデータ型が最も適していますか?
ST_polygonを使用できると思いますが、もっと特殊なタイプがあるかもしれません。
- よりよい性能
- より良いデータ保証(特定の列に非正方形の値を格納する場所がある場合は、エラーとしてキャッチしたい)
ST_rectangleまたはST_squareタイプを見つけようとしましたが、存在しないようです(?)
私はDB2を使用していますが、標準に準拠している限り、DB2では機能しないソリューションにも興味があります。
linq-to-sql - Linq2SqlまたはEF4での空間データ型のサポート
LinqToSQLまたはEntityFrameworkv4のVS2010リリースがSQL2008空間データ型を介したクエリをサポートするかどうかを(理想的には参照して)誰かが知っていますか?
data-structures - 「点 p から距離 d 内にあるすべての点」を照会するのに適切なデータ構造はどれですか
3D ポイントクラウドがあり、任意のポイント p から距離 d 内にあるすべてのポイントを効率的にクエリしたい (保存されたポイントクラウドの一部であるとは限らない)
クエリは次のようになります
これに適した加速構造は何ですか?範囲ツリーは、球のボリュームではなく、長方形のボリュームのクエリにのみ適しているようです (もちろん、球のバウンディング ボックスをクエリして、距離が d より大きいすべての頂点を並べ替えることができますが、もっと良い方法があるかもしれません)これ??)
ありがとう!
ノベロクラッツの提案に従って、構造の望ましい機能を定義しようとしています。
通常、n回のクエリの後、ポイントが移動し、いくつかの(多くはありません!)挿入と削除が行われます。オフセット ベクトルは、すべてのポイントのバウンディング ボックスに比べて非常に小さい
performance - SQL Server 2008 の空間データ機能はクエリのマッピングに役立ちますか?
基本的に、各行に緯度/経度の値が含まれる巨大なテーブル (1 億レコード) があるアプリがあります。
私は常にこのテーブルにクエリを実行して、特定の点を中心とした半径内に収まるすべてのレコードを取得しています。たとえば、「39.89288、-104.919434 から 5 マイル以内のすべてのレコード」
このために、緯度/経度の列にインデックスを作成し、ポイントの「バウンディング スクエア」を取得してから、ASP.Net アプリで円の外側にあるすべてのポイントを破棄しています。 SQL Server で円の計算を行うよりも。
注: これはすべて米国に関するデータであるため、私の計算では地球が平らであると考えています。これは私のニーズに対して十分に正確です。
さて、Lat/Long インデックスの主な問題は、ポイントの「正方形」であることです。「x と y の間の Lat」と「x と y の間の Long」を見つけようとしているので、実際にはできません。ポイントの「ライン」を検索する場合と同様に、インデックスを非常に効率的に使用します。
SQL 2008 の空間機能について調べてみましたが、これが役立つかどうかを判断するのに十分な具体的な情報が見つかりませんでした。
問題は、SQL 2008 には、この特定のタイプのクエリを SQL 2005 よりもはるかに高速にする、何らかの異なるタイプのインデックスがあるかどうかです。
sql-server-2008 - SQL Server 2008で「Covering、Spatial」インデックスを作成できますか?
現在、Lat / Long float列を含むテーブルと、これら2つの列のインデックスと取得する必要のある別の列があるサイトがあります。
私は常にこのテーブルをクエリして、特定のポイントから半径内にある行を取得しています(実際には速度のために正方形を取得しています)が、すでにインデックスが作成されているフィールドのみが必要なので、このインデックスは実際にカバーしています、および実行プランには2つのステップしかありません。
現在、SQL 2008の空間機能を利用しようとしています。地理列を作成し、それを埋め、空間インデックスを作成しました。
また、実行プランに100万ステップがあり、時間の74%がクラスター化インデックスシークに費やされ、空間インデックスで見つかった行を実際のテーブルに結合して残りを取得することを除いて、すべて正常に機能します。データの...
(空間インデックスシークは実行プランコストの1%を占めます)
したがって、明らかに、Spatialインデックスを適切に使用し、Lat / Longの「通常の」インデックスを使用して、以前よりもはるかに高速に必要なレコードを検索していますが、メインテーブルへの結合はKILLING meであり、Spatialクエリは7倍かかります。私の古いものと同じくらい。
空間インデックスに列を追加して、それがカバーされ、以前と同じように1つのステップで実行できるようにする方法はありますか?
この状況を改善するために私ができる他のことはありますか?
更新:「通常の」インデックスは、INCLUDEキーワードを使用して他の列を「含める」ことができることがわかりました(これは知らなかったので、以前はインデックス自体に列を含めるだけでした)ここ
のドキュメントによると、その句はそうではありません空間インデックスのオプション...何かアイデアはありますか?
ありがとう!
ダニエル
mysql - 空間MySQL機能を使用してテキスト比較(機能ベクトル)を高速化する
2つのテキストのトークン/単語を含む2つの配列を取り、両方のテキスト間の関係を示す余弦類似度値を出力する関数があります。
この関数は、配列$ tokensA(0 => house、1 =>bike、2 => man)と配列$ tokensB(0 =>bike、1 => house、2 => car)を取り、次のような類似性を計算します。浮動小数点値として返されます。
75のテキストを相互に比較する場合、すべてのテキストを相互に比較するには、5,625の単一比較を行う必要があります。
MySQLの空間列を使用して比較の数を減らすことは可能ですか?
自分の機能やテキストの比較方法については話したくありません。比較の数を減らすことについて。
MySQLの空間列
- 次のコマンドで空間列を作成します:CREATE TABLE abc(clmnName TYPE)
- 可能なタイプはここにリストされています
- 後でデータを選択する方法は次のとおりです[例:MultiPointFromText()またはAsText()]
- 次のように値を挿入します。INSERTINTOclmnNameVALUES(GeomFromText('POINT(1 1)'))
しかし、これを私の問題にどのように使用しますか?
PS:この質問のアルゴリズムとの比較の数を減らす方法を探しています。Vinko Vrsalovicは、空間的特徴について別の質問を開く必要があると私に言いました。
java - Hibernate での計算フィールドのマッピング
これが Hibernate で可能かどうかはわかりませんが、可能であれば本当に素晴らしいことです :) 実際にはこれで概念的な段階を過ぎたわけではありませんが、できる限り説明します。
Oracle Spatial の機能を利用して、近接ベースの検索を行いたいと考えています。緯度/経度の値を格納する Location エンティティがあるとします。次に、ユーザーが指定した緯度/経度の場所から 5 km 以内のすべての場所を照会したいとします。結果で、一致するすべての場所を表示したいのですが、場所エンティティの標準のマップされたフィールドに加えて、ユーザーが指定した場所に対する各場所の距離も表示したいと考えています。
Oracle Spatial ではこれを SQL の計算フィールドとして実行できますが、Hibernate がデータベースから返される計算フィールドをどのようにサポートできるかわかりません。計算フィールドはテーブルの列ではないため、標準のマッピングを行うことができません。
POJO のラッパーを作成し、追加の計算されたプロパティを返すことができるように Hibernate をそれらにマップできる特別な機能はありますか?
algorithm - 最高のパフォーマンス-最近傍を解くための重要なアルゴリズム
x、yペアのリストがあります。すべてのペアは、2D空間上の点を表します。このリストから特定のポイントxq、yqに最も近いポイントを見つけたいと思います。この問題に最適なパフォーマンスクリティカルなアルゴリズムは何ですか?ポイントのLispは変更されません。つまり、挿入と削除を実行する必要はありません。このセットでターゲットxq、yqポイントの最近傍を見つけたいだけです。
編集1:すべてに感謝します!Stephan202が正しく推測したように、私はこれを繰り返し行いたいと思います。関数のように。リストは必ずしもソートされているわけではありません(実際、どのようにソートできるかわかりません。2列のaとyの主キーを持つテーブルのように?それが役立つ場合は、リストをソートします)。
一度リストに基づいてデータ構造を構築し、次にこの生成されたデータ構造を関数で使用します(このプロセス自体が関連している場合)。
ジェイコブありがとう。KDツリーのデータ構造が答えになるのに適しているようです(そして、そうだと思います。関連する結果が得られたら更新します)。
編集2:この問題は「最近傍」と呼ばれていることがわかりました。
編集3:最初のタイトルは「アルゴリズムを求めて(空間クエリと空間インデックス用)(最近傍)」でした。新しいタイトルを選択しました:「ベストパフォーマンス-最近傍を解くための重要なアルゴリズム」。初期データに対して挿入および削除操作を実行したくなく、それらから新しいポイント(挿入されない)に最も近いデータだけが必要なため、(現在)KDツリーで作業することにしました。ありがとうございます!
sql - 地理的中間点の MySQL クエリ
任意の数の緯度/経度座標の地理的中点を計算するには、MySQL クエリ (または関数) が必要です。このページhttp://www.geomidpoint.com/calculation.htmlで説明されている方法 C (平均緯度/経度) を使用したいのですが、これを SQL クエリに変換する方法がわかりません。私は次のような形のものを探しています:
ポイントから LATITUDE_AVG_FORMULA(points.latitude),LONGITUDE_AVG_FORMULA(points.longitude) を選択;
ポイント テーブルの各ポイントには、緯度と経度が 10 進形式で関連付けられています。誰かがこれに使用している MySQL クエリ (または関数) を既に持っているか、地理空間計算の経験が私よりもはるかに多いことを願っています。よろしくお願いします。