問題タブ [sqlgeography]
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.
geometry - 中心点の指定された半径で地球上の正方形の境界を計算します
特定の半径を持つ正方形の境界を計算しようとしていますが、正方形の中心がわかっている場合(経度、緯度)。しかし、私はそれで問題を抱えています。
ここから haversine 式を使用しようとしました:
しかし、半径がかなり大きいと問題が発生します。
現在、1) を検索します。私が使用するラジアン単位の緯度デルタ:
- radiusInMeters / EARTH_RADIUS_METERS
2)。私が使用するラジアンの経度デルタ:
- 2.0 * | arcsin( |sin(radiusInMeters/(EARTH_RADIUS_METERS*2.0)) / |cos(latitudeStart)| | ) |
これらの式は、haversine 式から取得しました。
私の場合、大小の距離に適した正確な一般的な計算式を教えてください。
また、半径が経度で-180°/180°、緯度で-90°/90°を超える場合、どのように処理すればよいですか?
アップデート
いくつかの説明。座標 (lon, lat) のある特定の地点に滞在しているとしましょう。ここで、lon は -113°、lat 50° です。
データベースから関心のある半径内のポイントをクエリしたいと思います。そのためには、「正方形」の境界を計算する必要があります。(次に、対象の半径にないものを除外します)。上記の式は短い距離では問題なく機能します (100 キロメートル (63 マイル) までとしましょう。しかし、赤道点から極点に離れるほど、丸め誤差が大きくなります。)
前もって感謝します
sql-server - .NET を使用して sqlGeography LINESTRING を作成する
さまざまな外部マップ ファイル形式 (ShapeFiles、MapPoint、KML など) を解析し、中央のマッピング/レポート ベースに使用される中央データベースに形状を格納するアプリケーションを構築しています。ポイントの抽象的な配列で表される線を持つルーチンがあり、それをデータベースに格納する sqlGeography オブジェクトに変換しようとしています (現時点では SQL2012 Express)。
LINESTRING ステートメントの例を次に示します (文字列 strGeo に格納されます)。
次に、その文字列に対してこの操作を実行します (VB.NET)
SQL Server 2012 Feature pack から Microsoft.SqlServer.Types への適切な参照を追加しましたが、デバッガーが SqlGeography 行にヒットすると、次のようになります。
コンピューターのどこにも SqlServerSpatial110.dll が見つかりません。SQL Express 2012 がインストールされており、SYSTEM32 と SYSWOW64 の両方で SqlerverSpatial.dll を見つけることができますが、VS ではこれらのファイルのいずれも登録できません。
このように LINESTRING で 2 つの括弧を使用すると、別のエラーが発生することに気付きました。
(文字数を数える前に、位置 27 は最初の緯度/経度の組み合わせの間のスペースです)
最初の文字列形式は正しい形式だと思いますが、現時点では確信が持てず、SqlServerSpatial110.dll の問題をどう処理すればよいかわかりません。
この道を通った人いますか?何か不足していますか?
sql - SQLで2つの緯度/経度の間の距離を効率的に見つける
私は数十億行のデータを扱っており、各行には開始緯度/経度と終了緯度/経度が関連付けられています。各始点/終点間の距離を計算する必要がありますが、非常に時間がかかります。私は本当に自分がしていることをより効率的にする必要があります。
現在、関数(以下)を使用して、ポイント間の斜辺を計算しています。これをより効率的にする方法はありますか?緯度/経度を空間地理としてキャストし、STDistance() 関数 (インデックスなし) に組み込まれた SQL を使用することは既に試みましたが、これはさらに遅くなりました。
どんな助けでも大歓迎です。精度が少し低下するとしても、機能を高速化する方法があることを願っています(最も近い100mはおそらく問題ありません)。前もって感謝します!
c# - SqlGeography と C# を使用した DataTable 値の不一致
したがって、次のコードはかなり紛らわしい例外を与えています。
行myTable.Rows.Add(6, "Test", myGeography); 次の例外が発生する場所です:
私が得られないのは、なぜこれが失敗するのかということです。デバッグ中に私はこれを試しました:
そして、私の出力は次のとおりです。
だから、私は間違いなく SqlGeography オブジェクトを取る列に SqlGeography オブジェクトを入れようとしています。
sql - SQLビューと地理を使用してvarbinaryのメソッドを呼び出すことはできません
この行にエラーがあります
言って:
varbinary でメソッドを呼び出すことはできません
Operation.vw_AllRecord
ビューであることに注意してください
tsql - T-SQL の geography クエリ: インデックスの使用
誕生日のピエロのデータベースがあるとします。このデータベースには、各ピエロがいるポイント (ピエロの自宅住所の緯度と経度から生成されます) のバイナリ表現を含む地理列が含まれています。geography 列に geo-index があります。
国際的な大手ソフトウェア会社の CEO が、米国内の全従業員と住所 (緯度と経度を含む) の CSV ファイルを送信してきました。従業員ごとに、15 マイル以内に誕生日のピエロが何人いるかを示すレポートを生成する必要があります。
where 条件は次のようになります。
またはこのように:
両方の where 句は、BirthdayClowns テーブルで作成したインデックスを利用するでしょうか? それとも、一方はそれを使用し、もう一方は使用していませんか? もしそうなら、どれがどれですか?
sql - 再帰的な幾何学的クエリ: 5 つの最も近いエンティティ
問題は、以下で説明するクエリが手続き型ロジックに頼らずに実行できるかどうか、つまり、SQL と CTE とウィンドウ関数だけで処理できるかどうかです。私は SQL Server 2012 を使用していますが、質問はそのエンジンに限定されません。
250,000 行の音楽教師の全国データベースがあるとします。
ここで、geolocation
列はgeography::point
最適にテセレートされたインデックスを持つデータ型です。
ユーザーは、自分の場所に最も近い 5 人のギター教師を探しています。ウィンドウ関数を使用したクエリは、任意の距離カットオフ (たとえば 50 マイル) を選択すれば十分に機能します。これにより、250,000 行すべてを選択して距離でランク付けし、最も近い 5 を取得する必要がなくなります。
しかし、たとえば、ユーザーがシタール、ウード、バラライカなど、異なる文化の楽器を選んだ場合、その任意の半径 50 マイルのカットオフが常に 5 人の教師を網羅できるとは限りません。彼女のいる場所から 50 マイル以内に、そのような楽器の教師が 5 人もいないかもしれません。
また、音楽院から 250 人の歌手のリストが送られてきました。このリストは、次年度の入学が許可された学生で、最も近いボイス コーチ 5 人を送りたいと考えています。リストに載っている各人が、キャンパスに到着する前にコーチングを受けることができるようにします。教師のデータベースを 250 回スキャンする必要があります (つまり、ジオロケーション インデックスをスキャンします)。これらの生徒は全員、全国のさまざまな場所に住んでいるからです。
それで、私は、250 の学生の場所のリストを含む後者のクエリについて、たとえば 10 マイルで半径が小さく始まり、反復ごとに 10 マイルずつ増加する再帰クエリを作成できるかどうか疑問に思っていました。最大半径 100 マイルに達したか、必要な 5 人の教師が見つかりましたか? また、必要な 5 人の教師とまだ一致していない生徒のみに行うことはできますか?
SQL だけでは実行できず、ループと一時テーブルで実行する必要があると考えていますが、SQL だけで実行する方法を理解していないためかもしれません。
PS primaryInstrument 列は、距離でランク付けされたセットのサイズも減らすことができますが、この質問のためにそれを忘れてください。
編集: これはクエリの例です。SINGER (提出された) データセットには、地理的結果をより小さなサブセットに制限するための任意の半径を持つ列が含まれていますが、上記のように、その半径は、必要な数を含まない可能性がある円 (中心点は学生の地理位置情報) を定義する場合があります。教師の。提供されたデータセットには、数百ではなく、数千のアドレスが含まれている場合があります。
c# - SqlGeography.STIntersection() は、交差がないことがわかっている場合でも返されます
アプリケーションについて少し。
このアプリケーションを使用すると、ユーザーは多角形を描いて bing maps WPF API に保存できます。
私たちが興味を持っているコードは、ポイントがポリゴン内にあるかどうかの天気を見つけることです。LocationCollection
次の関数は、bing マップ上のポリゴンの を単純にループし、ポリゴンSqlGeography object (OpenGisGeographyType.Polygon)
のインスタンスである を作成します。
次に、マウス クリックをSqlGeography object (OpenGisGeographyType.Point)
緯度と経度に変換し、SqlGeography.STIntersection を使用して、ポイントがポリゴン内にあるかどうかを確認します。
図に示すように、ポイントがポリゴンの外側にある場合でも、SqlGeography.STIntersection は交点を返します。(polygonSearch() 関数が返す内容に応じて、ラベルを「配送エリア内」または「エリア内のお客様」に設定しているため、図でこれを確認できます。
写真の右側の例は、ポリゴン内で場所をテストしたときに期待される結果を示しています。
写真の左の例には、予期しない結果が含まれています。これは、ポイントがポリゴン内にあることを示していますが、明らかにそうではありません!
ノート:
- SqlGeography (myShape) を使用して図形をマップに配置するので、図形が適切な頂点で構築されていることがわかります。
- SqlGeography (myPoint) を使用してピンをマップに配置するので、ピンが正しい頂点でテストされていることがわかります。
- これは大きなポリゴンでのみ失敗します
以下に、メモリ内にポリゴンを作成し、マウス クリック イベントを緯度経度に変換するコードを示します。( bing api を必要とせずにこれを見ることができるように、ポリゴンの頂点をコメントに含めました。 for ループをその上のコメントに置き換えるだけです ) ただし、Microsoft.SqlServer.Types.dl
SqlGeography オブジェクトを作成するには l を参照する必要があります。SQL Express 2008 では無料で、次の場所にあります。C:\Program Files (x86)\Microsoft SQL Server\100\SDK\Assemblies
どんな助けでも大歓迎です。私はこの問題で上司を怒らせ始めています >.<
これは SRID と関係がありますか?