タグ付けされた質問 「spatial」

空間データ(幾何学的および地理的表現を含む)の格納、クエリ、およびインデックス付け。

1
修正不可能な空間インデックスの破損は正常と見なされますか?
破損を報告する空間インデックスがありDBCC CHECKDBます: DBCC CHECKDB(MyDB) WITH EXTENDED_LOGICAL_CHECKS, DATA_PURITY, NO_INFOMSGS, ALL_ERRORMSGS, TABLERESULTS 空間インデックス、XMLインデックス、またはインデックス付きビュー 'sys.extended_index_xxx_384000'(オブジェクトID xxx)には、ビュー定義が生成するすべての行が含まれていません。これは、必ずしもこのデータベース内のデータの整合性の問題を表しているわけではありません。 空間インデックス、XMLインデックス、またはインデックス付きビュー 'sys.extended_index_xxx_384000'(オブジェクトID xxx)には、ビュー定義によって生成されなかった行が含まれています。これは、必ずしもこのデータベース内のデータの整合性の問題を表しているわけではありません。 CHECKDBは、テーブル 'sys.extended_index_xxx_384000'(オブジェクトID xxx)で0の割り当てエラーと2つの一貫性エラーを検出しました。 修理レベルはrepair_rebuildです。 インデックスを削除して再作成しても、これらの破損レポートは削除されません。なしでEXTENDED_LOGICAL_CHECKSはなくてDATA_PURITYエラーが報告されていません。 また、CHECKTABLECIのサイズは30 MBで、約3万行ありますが、このテーブルには45分かかります。そのテーブルのすべてのデータはポイントgeographyデータです。 この動作はどのような状況でも予想されますか?「これは必ずしも整合性の問題を表しているわけではありません」と書かれています。私はどうしたらいいですか?CHECKDB失敗しています。これは問題です。 このスクリプトは問題を再現します: CREATE TABLE dbo.Cities( ID int NOT NULL, Position geography NULL, CONSTRAINT PK_Cities PRIMARY KEY CLUSTERED ( ID ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, …

3
高速(<1s)の読み取りクエリパフォーマンスを備えた大規模(> 22兆項目)地理空間データセット
私は、迅速な読み取りクエリのパフォーマンスを必要とする大規模な地理空間データセット用の新しいシステムを設計しています。したがって、次の状況で必要なパフォーマンスを達成するために、適切なDBMS、データ構造、または代替方法について可能性があると思うか、経験/アドバイスを持っている人がいるかどうかを確認したいと思います。 データは、処理された衛星レーダーデータから継続的に生成され、グローバルカバレッジになります。衛星の解像度と地球の土地被覆率に基づいて、全データセットを推定して、地球上の750億の場所で値を生成します。単一の衛星の寿命にわたって、出力はこれらの場所のそれぞれで最大300の値を生成します(したがって、22兆を超える値の合計データセット)。これは1つの衛星のためのものであり、軌道上にはもう1つの衛星があり、新しい数年でもう2つの衛星が計画されています。したがって、多くのデータがあります!単一のデータアイテムは非常に単純で、(経度、緯度、値)のみで構成されますが、アイテムの数が原因で、1つの衛星で最大100 TBを生成すると推定しています。 書き込まれたデータは更新する必要はありません。新しい衛星の取得が処理されると成長するからです。書き込みパフォーマンスは重要ではありませんが、読み取りパフォーマンスは重要です。このプロジェクトの目標は、Googleマップ上のレイヤーなどのシンプルなインターフェイスを介してデータを視覚化できるようにすることです。各ポイントには、時間の平均、勾配、または何らかの関数に基づいた色付きの値があります。(投稿の最後にデモ)。 これらの要件から、データベースはスケーラブルである必要があり、クラウドソリューションを検討する可能性があります。システムは、「points near(lat、lon)」や「points within(box)」などの地理空間クエリを処理できる必要があります。また、単一のポイントと最大で50,000ポイント(ただし、最大200,000ポイントが望ましい)。 これまでのところ、1億1100万の場所に最大7億5,000万のデータ項目のテストデータセットがあります。私はpostgres / postGISインスタンスを試してみましたが、これは問題なく動作しましたが、シャーディングの可能性がなければ、これはデータの増加に応じて対処できるでしょう。シャーディングでは、データボリュームに合わせて拡張するだけで十分な場合があります。最近、私はelasticsearchについて少し学んだので、これについてのコメントは私にとって新しいので役立つでしょう。 完全なデータセットで達成したいものの簡単なアニメーションを次に示します。 このgif(私のpostgresトライアルから)は(6x3)事前に計算されたラスタータイルを提供し、それぞれが〜200,000ポイントを含み、それぞれを生成するのに〜17秒かかります。ポイントをクリックすると、1秒未満で最も近い場所にあるすべての履歴値を取得して、グラフが作成されます。 長い投稿に謝罪、すべてのコメント/アドバイスは大歓迎です。

3
POINT(X、Y)とGeomFromText(“ POINT(XY)”)の違いは何ですか?
MySQLデータベースにいくつかの幾何学的位置を保存したいと思います。このために、POINTデータ型を使用します。ほぼすべての場所GeomFromTextで、テーブルにデータを挿入するために関数を使用する必要があることを読みました。 しかし、私POINT(X,Y)もそれが機能することがわかりました。のGeomFromText代わりにを使用する理由についての説明が見つかりませんでしたPOINT。 たとえば、次の単純な関係があります。 CREATE TABLE Site ( SiteID BIGINT UNSIGNED, Position POINT ); そして、次の2つのバリアントを使用して値を挿入できます。 INSERT INTO Site ( 1, GeomFromText( 'POINT(48.19976 16.45572)' ) ); INSERT INTO Site ( 2, POINT(48.19976, 16.45572) ); テーブル(SELECT * FROM Site)を表示すると、場所に同じバイナリBLOBが表示され、座標(SELECT *, AsText(Position) FROM Site)を表示すると、同じ値が表示されます。 では、なぜGeomFromTextを使用する必要があるのでしょうか?これら2つのバリアントの間に(既知の)パフォーマンスの違いはありますか?これはMySQL以外のデータベースシステムでどのように解決されますか?

3
PostgreSQLとMySQL:空間的特徴の比較
現在、空間データコンポーネントを持つWebアプリケーションを構築しています。空間データの比較では、最初に特定のポイントを取得し、一致する重複した空間ポリゴンを返します。 そうは言っても、私たちのデータベースには、一般的なリレーショナルデータベースで見られるすべての典型的なものを含む他の多くのコンポーネントがあります。 私たちはプロジェクトで、使用するデータベースソリューションを選択する必要があります。 すべてのプロジェクトメンバーは、MySQLの実装と管理に精通していますが、すべての研究では、特にpostGISを使用した空間データに関して、PostgreSQLがより優れたソリューションであることが示唆されています。 私たちのアプリケーションが多くの同時ユーザーで多くのアクションを体験することを期待しています。 空間データコンポーネントを使用してRDBMSとしてMySQLを使用した経験がある人には、長期的なアドバイスや経験がありますか? PostGISを使用することの不便さはありますか?

2
GISデータ用のPostGISとSQL Server
だから私は最近新しい会社に着手し、顧客にデータを提供するためにPostGISインスタンスを進めたいと強く思っている多くのArcGISユーザーがいます。これについては問題ありませんが、私たちは95%がSQL Server、5%がOracleショップです。現在の内部GISはSQL Serverで実行されており、苦情はまだ聞いていません。 2012年の時点で、SQL Serverの空間/幾何学的機能が大幅に改善されていることは知っていますが、新しいプラットフォームに侵入する価値のあるPostGISのキラー機能はありますか?私はそれを研究しようとしましたが、真に詳細なものを見つけることができません、またはそれは完全に偏っていません。 私は彼らに彼らの仕事を成し遂げるための最高のツールを提供したいだけでなく、私が最初からPostgres / GISを学び、それがそれ自体の全体の旅であるという事実を考慮しなければなりません。

2
SQL Server 2016の空間データ用のMakeValid()の代替
LINESTRINGOracleからSQL Serverに移行する地理データの非常に大きなテーブルがあります。Oracleのこのデータに対して実行される評価は多数あり、SQL Serverのデータに対しても実行する必要があります。 問題:SQL ServerにはLINESTRING、Oracleよりも有効な要件が厳しい。「LineStringインスタンスは、2つ以上の連続したポイントの間隔で自身をオーバーラップさせることはできません」。LINESTRINGsの パーセンテージがその基準を満たしていないということが起こります。つまり、データを評価するために必要な関数が失敗します。データを調整して、SQL Serverで正常に検証できるようにする必要があります。 例えば: LINESTRINGそれ自体に倍増する非常にシンプルな検証: select geography::STGeomFromText( 'LINESTRING (0 0 1, 0 1 2, 0 -1 3)',4326).IsValidDetailed() 24413: Not valid because of two overlapping edges in curve (1). MakeValidそれに対して関数を実行する: select geography::STGeomFromText( 'LINESTRING (0 0 1, 0 1 2, 0 -1 3)',4326).MakeValid().STAsText() LINESTRING (0 -0.999999999999867, 0 0, …

1
最初に1つのインデックスを検索し、次に別のインデックスを検索するようにクエリを最適化する方法
衛星データからの2つの地球測定値セットがあり、それぞれに時間フィールド(平均ユリウス日付のmjd)と地理的位置(GeoPoint、空間)があり、2つのセット間の一致が時間のしきい値に一致するように探しています3時間(または.125日)およびそれらの距離は互いに200 km以内です。 テーブルと空間テーブルの両方のmjdフィールドにインデックスを作成しました。 時間の制約に参加するだけで、データベースは8秒で100,000回の一致を計算し、その時間内のすべての100,000回の一致の距離を計算します。クエリは次のようになります。 select top 100000 h.Time, m.Time, h.GeoPoint.STDistance(m.GeoPoint)/1000.0 from L2V5.dbo.header h join L2.dbo.MLS_Header m on h.mjd between m.mjd-.125 and m.mjd+.125 option( table hint ( h, index(ix_MJD) ), table hint( m, index(ix_MJD) ) ) 実行された計画は次のとおりです。 並べ替えると、9つの距離が200km未満であったため、一致します。問題は、距離制約を追加して代わりにこれを実行すると、 select top 10 h.Time, m.Time, h.GeoPoint.STDistance(m.GeoPoint)/1000.0 from L2V5.dbo.header h join L2.dbo.MLS_Header m on …

3
STIntersectsのパフォーマンスの向上
テーブルにT_PINは300,000のピンとT_POLYGON36,000のポリゴンがあります。T_PINこのインデックスがあります: CREATE SPATIAL INDEX [T_PIN_COORD] ON [dbo].[T_PIN] ( [Coord] )USING GEOGRAPHY_GRID WITH (GRIDS =(LEVEL_1 = HIGH,LEVEL_2 = HIGH,LEVEL_3 = HIGH,LEVEL_4 = HIGH), CELLS_PER_OBJECT = 128, PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; T_POLYGON 持っています: …

2
MySQLはポイントデータ型をLAT LNGまたはLNG LATとして格納しますか?
位置形式を緯度に続いて経度として表示することに慣れていますが、ライブラリを使用すると、MySQLがそれをPOINT(LNG LAT)と逆の順序で格納することを理解していると思います。私のライブラリは間違っていますか、それともこれが実際の形式ですか?MySQLのドキュメントでこの詳細を見つけることができないようです。
9 mysql  spatial 

4
MySQLを介して半径でzipを取得する際の問題
各郵便番号の中央の緯度と経度を含む郵便番号の表があります。私はそれを使用して、任意のポイントから半径1マイル以内の郵便番号のリストを取得します。 ジッパーの中心点が特定の半径内にないからといって、ジップ自体が半径内にないということにはならないということが、私に思い浮かんだばかりです。 超高度なアートスキルを使用して、ここでポイントを説明しました。 緑のストライプのブロブは、郵便番号A、B、Cを表しています。 赤い汚れは各郵便番号の地理的中心です フクシアドットはターゲットの場所です。 でこぼこの青い円は、ターゲットの場所から半径1マイルです。 ピンク色の汚れから半径1マイル以内のすべての郵便番号に対してクエリを実行すると、ピンク色の汚れ自体であっても、郵便番号BとCのみが返されます。郵便番号Aの中心点は半径1マイル以内にないためです。明らかに郵便番号Aです。 SELECT *, p.distance_unit * DEGREES(ACOS(COS(RADIANS(p.latpoint)) * COS(RADIANS(z.y)) * COS(RADIANS(p.longpoint) - RADIANS(z.x)) + SIN(RADIANS(p.latpoint)) * SIN(RADIANS(z.y)))) AS dist FROM standard_zip AS z JOIN ( /* these are the query parameters */ SELECT $lat AS latpoint, $lng AS longpoint, $miles AS radius, 69 AS …

3
Yelpはどのようにしてデータベース内の距離を効率的に計算しますか?
たとえば、テーブルがあるとします。 Business(BusinessID, Lattitude, Longitude) もちろん、すべてに索引が付けられています。また、100万件のレコードがあります たとえば、106,5に最も近いビジネスを検索したい場合、どうすればよいでしょうか。 私が行った場合 SELECT * FROM Business WHERE (Some formula to compute distance here) &lt; 2000 たとえば、または私が行う場合 SELECT * FROM Business TOP 20 理論的には、コンピューターはすべてのビジネスの距離を計算する必要がありますが、実際には、緯度と経度が特定の範囲内にあり、計算する必要があるビジネスのみが計算されます。 たとえば、PhPやSQLでやりたいことはどのようにしたらよいでしょうか。 これまでの答えに感謝しています。私はmysqlを使用していますが、それらには明らかな解決策よりも効率的なものはありません。MySQL空間には、距離計算機能もありません。

3
数値テーブルでクロス結合してラインの頂点を取得します。もっと良い方法はありますか?
質問: ESRIのユーザー定義データタイプを使用してOracle 12c ジオデータベースに格納された空間テーブル(道路線)SDE.ST_GEOMETRYがあります。最終的にそれらの座標にアクセスして更新できるように、線の頂点をリストします。SDO_GEOMETRY / Oracle Locatorを使用している場合は、関数を使用し ます。しかし、私はSDO_GEOMETRY / Oracle Locatorを使用しておらず、に同等の関数はありません。唯一の機能私は頂点に関係することを見つけることができますがありますと。SDO_UTIL.GETVERTICESSDE.ST_GEOMETRYSDE.ST_GEOMETRY ST_PointNST_NumPoints これをすべて正常に実行するクエリを考え出しました-行の頂点を行として取得します(このページから発想を得ています): 1 SELECT a.ROAD_ID 2 ,b.NUMBERS VERTEX_INDEX 3 ,a.SDE.ST_X(SDE.ST_PointN(a.SHAPE, b.NUMBERS)) AS X 4 ,a.SDE.ST_Y(SDE.ST_PointN(a.SHAPE, b.NUMBERS)) AS Y 5 FROM ENG.ROADS a 6 CROSS JOIN ENG.NUMBERS b 7 WHERE b.NUMBERS &lt;= SDE.ST_NumPoints(a.SHAPE) 8 --removed to do explain plan: ORDER …

1
MySQLに地理的位置データを格納するための10進数またはポイントデータタイプ
MySQL(Innodb)の「tblAddress」テーブルに各住所の地理的位置を保存したいのですが、2つのオプションがあると思います。 1) 2 columns for Each Address: Latitude DECIMAL(10, 8), Longitude DECIMAL(11, 8) 2) One Column for Each Address: GeoLocation POINT 私のプログラムは、現在の場所(モバイルクライアント)から1キロメートルの半径に該当するすべての住所を検索する必要があります。 また、以下のコマンドは私には機能しません、これのために何が必要かわかりません。 CREATE SPATIAL INDEX GeoLocation ON tblAddress (GeoLocation); したがって、ここで計算と取得を高速化するためにデータを保存するための推奨アプローチは何ですか。お知らせ下さい。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.