この投稿の目的は、SQL Serverデータベースサーバーを使用してこの情報を保存および取得する方法を示すことです。 2008バージョン以降、幾何学的および地理的データタイプを保存および処理できます。 したがって、可能な限りこの目的に適しています。
まず、データベースサーバーが理解できる形式でデータをエクスポートする必要があります。 幸いなことに、自転車を発明する必要はありません。 OpenStreetMapは、ほとんどの最新のデータベースで理解できるXML形式へのエクスポートをサポートしていますが、OSMと誤解されているためです。
サンクトペテルブルク市のすべての銀行に関する情報を調べて処理したいとします。 これを行うには、プロジェクトに関する必要な情報を見つけて、「エクスポート」ボタンをクリックします。

この場合、エクスポート形式「データ(OpenStreetMap XML)」を選択する必要があります
残念ながら、幸いなことに、選択した領域のオブジェクトの数が制限を超えている場合があります。 次に、 gis-lab.infoリソースから保存されたosmファイルが助けになります
必要に応じて、サンクトペテルブルクを選択し、必要なosmファイルをダウンロードします
これで、受信したデータをデータベースにロードできます。 覚えているように、SQL Serverでこれを行うつもりでしたが、SQL Server 2008R2を使用します。
最初に、受信したデータをxml型変数に変換します。
DECLARE @x xml;
SET @x = (SELECT * FROM OPENROWSET(
BULK 'C:\tmp\stpeter.osm',
SINGLE_BLOB) AS x);
次に、ノードのテーブル(ノード)とその説明(nodestag)を作成します
最初に、最初に:
IF object_id('nodes') IS NOT NULL
DROP TABLE nodes
CREATE TABLE nodes (
nodeid int,
latitude float,
longitude float,
geog4326 geography
);
INSERT INTO nodes
SELECT
OSMnode.value('@id', 'int') AS nodeid,
OSMnode.value('@lat', 'float') AS latitude,
OSMnode.value('@lon', 'float') AS longitude,
geography::Point(OSMnode.value('@lat', 'float'), OSMnode.value('@lon', 'float'), 4326) AS geog4326
FROM
@x.nodes('/osm/node') AS OSM(OSMnode)
SQL Server Management Studioでの結果データの表示方法は次のとおりです。

各ノードは(オプションで)任意の数のタグを持つことができます。 XMLソースファイルでは、それらはそれぞれの子要素で表されます。
IF object_id('nodetags') IS NOT NULL
DROP TABLE nodetags
CREATE TABLE nodetags (
nodeid int,
tagname varchar(32),
tagvalue varchar(32)
);
INSERT INTO nodetags
SELECT
OSMNode.e.value('(@id)[1]', 'int') AS 'NodeID',
OSMNodeTag.e.value('@k', 'nvarchar(32)') AS 'TagName',
OSMNodeTag.e.value('@v', 'nvarchar(32)') AS 'TagValue'
FROM
@x.nodes('/osm/node') AS OSMNode(e)
CROSS APPLY
OSMNode.e.nodes('tag') AS OSMNodeTag(e)
さて、私たち全員がそれを始めたものを手に入れましょう:
SELECT
n.nodeid,
n.geog4326,
nt.TagValue
FROM nodes n
LEFT JOIN nodetags nt ON n.nodeid = nt.nodeid AND TagName in ('Name' ,'operator')
WHERE n.nodeid IN
(
SELECT nodeid from nodetags
where tagvalue like '%%'
)
受け取ったポイントがSSMSに表示される方法は次のとおりです。

また、取得したデータは、たとえばBingカードに簡単に転送できます(Microsoft Report Builderを使用してこれを行いました)。

gis-lab.infoのメンバーのみに感謝することができます。また、キエフに別のトレーニング場がないことを後悔しています。 ウクライナ全体のようなエンティティは、投げて回すのが非常に困難です...