pbfをMSSQLにインポートする手順(Windows)

# はじめに
この記事では、Windows環境におけるpbf形式のデータをMicrosoft SQL Serverにインポートする方法を解説します。

1. Microsoft SQL Serverのインストール
1. SQL Server Management Studioのインストール
1. SQL Serverに接続
1. pbfファイルのインポート
1. 参考

PBFについての基本情報
> PBF（Protocolbuffer Binary Format）は、地図データを効率的に保存、転送するためのバイナリ形式です。主にOpenStreetMap（OSM）プロジェクトで使用されており、OSMデータを圧縮し、サイズを小さくするためにProtocol Buffers（Googleによって開発されたデータシリアライズ形式）を利用しています。PBF形式は、XML形式のOSMデータに比べて読み込みや書き込みが高速で、ストレージの効率も向上します。PBFファイルは、地図レンダリングや分析、マッピングアプリケーションで広く利用されています。


# 手順
### 1.Microsoft SQL Serverのインストール
Microsoftの公式サイトから、MSSQLのインストーラーをダウンロードします。

::: note 
自分の場合はSQL Server Version 2022をインストールしました。
https://www.microsoft.com/ja-jp/evalcenter/download-sql-server-2022
:::

インストーラーを実行します。

::: note 
Basic, Custom, Download Mediaの3種類がありますが、自分の場合はBasicを選択したので下記はBasicを選択した場合の手順となります。
:::

Terms&Conditionを確認し、Installを実行します。

### 2.SQL Server Management Studioのインストール

::: note warn
SQL Serverのインストール完了後に表示されるポップからSSMSのインストールしても同じ作業になります。
コマンドベースでSQL Serverを操作される方はこの手順は必要ありませんが、この記事ではコマンドベースでの操作に関しては説明しておりません。
:::

https://learn.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver16
 
- Install先を確認し、Installを実行します。
自分の場合は、AuthenticationはWindows Authenticationを指定し他はデフォルトのまま使用しました。
- Trust Server Certificateにチェックを入れ、接続します。

- 念のため、SQL Serverが起動しているか確認します。
SQL Server Configuration Managerを起動します。
左側のツリーの[SQL Server Configuration Manager(Local)] - [SQL Services] - [SQL Server (Server名)]がRunningになっていることを確認します。

### 3.SQL Serverに接続

SQL Server Management Studioを起動し、Serverに接続します。
- Server Type: Database Engine
- Server name: Your Server Namae
- Authentication: Windows AUthentication
- Encryption: Mandatory
- Trust server certificate: ON

::: note warn
SQL Server Management Studioのインストール時のAuthenticationでSQL Serverを選択した場合は、作成したアカウントでServerに接続してください。
:::

### 4.PBFファイルのインポート

::: note warn
本記事では、ODBC Driver 17 for SQL Serverを使用しております。環境に合わせて変更してください。
:::

本記事では、以下のオプションを指定していますが、必要に応じて使い分けでください。
<dt>-a_srs<dt>
<dd>出力データの座標参照系（SRS）を指定するオプションです。
EPSG:4326は、WGS84（世界測地系）を示し、緯度・経度の座標系です。<dd>
<dt>--config<dt>
<dd>SQL Server内でジオメトリカラムを使用することを指定しています。<dd>
<dt>-nln<dt>
<dd>新しいテーブル名を指定するオプションです。ただし、対象ファイル内のすべてのレイヤーをインポートする場合は、このオプションは指定しません。<dd>
<dt>指定するレイヤー名<dt>
<dd>特定のレイヤーを指定する場合はレイヤー名を指定します。レイヤー名の検索については[5.参考]に記載します。ただし、対象ファイル内のすべてのレイヤーをインポートする場合は、このオプションを指定しません。<dd>
<dt>-oo<dt>
<dd>Open Optionの略です。<dd>
<dd>使用例:OGR_GEOMETRY_ACCEPT_UNCLOSED_RING=NO<dd>


- AuthenticationがWindows Authenticationの場合
```
ogr2ogr -f "MSSQLSpatial" "MSSQL:driver={ODBC Driver 17 for SQL Server};server=localhost;database=[データベース名];Trusted_Connection=yes" [.gdbのファイルパス] -a_srs EPSG:4326 --config MSSQLSPATIAL_USE_GEOMETRY_COLUMN YES -nln [テーブル名] [指定するレイヤー名]
```

- AuthenticationがSQL Serverの場合
```
ogr2ogr -f "MSSQLSpatial" "MSSQL:driver={ODBC Driver 17 for SQL Server};server=localhost;database=[データベース名];uid=[ユーザID];pwd=[パスワード]" [.gdbのファイルパス] -a_srs EPSG:4326 --config MSSQLSPATIAL_USE_GEOMETRY_COLUMN YES -nln [テーブル名] [指定するレイヤー名]
```

### 5.参考
#### SQL Server認証を追加
自分が直面したエラーについて記載します。
SQL Serverセットアップ時にWindows Authenticationを指定した場合かつ
- SQL Server認証も追加したい
- ogr2ogrコマンドで、UserID/Passwordでコマンド実行したい
場合は、下記を参考にしてください。

- Serverの認証方法を変更します。
    - サーバーを右クリック
    - Securityタブを選択
    - Server authenticationを[SQL Server and Windows Authentication mode]を選択します。

#### ログインユーザーを作成
サーバー直下の[Security - Logins]を右クリックし、[New Login]をクリックします。
必要な情報を記入し、[OK]をクリックします。

#### ODBCドライバの確認
- 「スタート」メニューを開き、「ODBC」と入力します。
- 「ODBCデータソース（32ビット）」または「ODBCデータソース（64ビット）」を選択します。
- ODBCデータソースアドミニストレーターが開いたら、「ドライバ」タブをクリックします。
- インストールされているODBCドライバの一覧が表示されます。

#### PBFのレイヤー一覧を取得
一部のレイヤーのみを抽出したい場合に、レイヤー名を知る必要があります。レイヤー名を調べるには、下記のコマンドを実行します。

<dt>-al<dt>
<dd>allの略です。このオプションを使用すると、指定したデータソース内のすべてのレイヤー情報を表示します。<dd>
<dt>-so<dt>
<dd>summary onlyの略です。このオプションを使用すると、レイヤーの簡潔な概要情報のみを表示します。詳細な情報を見る場合は、このオプションは指定しません。<dd>

```
ogrinfo -al -so [.pbfファイルパス]
```

#### インポート時の警告
- Non closed ring detected
ジオメトリデータにおいて「閉じていないリング」が検出されたことを示しています。リングは、ポリゴンの境界を形成する点の集まりで、最初の点と最後の点が一致しない場合、閉じていないと見なされます。このエラーを避けるためには、設定オプション OGR_GEOMETRY_ACCEPT_UNCLOSED_RING を NO に設定することが推奨されています。

## まとめ
本手順で、PBFをMSSQLのデータベースにインポートすることができました。