※ ChatGPTを利用し、要約された質問です(原文:緯度と経度をgeometry型に変換)
緯度と経度をgeometry型に変換する方法
このQ&Aのポイント
質問者は、位置参照情報ダウンロードサービスからダウンロードしたデータを利用して、SQLServerで地図データ(緯度経度)を検索しようとしています。
具体的には、ダウンロードしたCSVファイルを取り込みテーブルに`bulk insert`し、緯度と経度の値をgeometry型に変換して別のテーブルに移行したいと考えています。
しかし、質問者はgeometry型のデータの作成とselect文の作成について困っています。直接値を書く方法は問題ありませんが、ダウンロードしたデータを利用する方法がわかりません。ご教示をお願いします。
位置参照情報ダウンロードサービス
http://nlftp.mlit.go.jp/isj/
ダウンロードしたデータを利用して、SQLServerで地図データ(緯度経度)を検索しようと思ってます。
中身は、
都道府県コード,都道府県名,市区町村コード,市区町村名,大字町丁目コード,大字町丁目名,緯度,経度,原典資料コード,大字・字・丁目区分コードとなってます。
以下のURLを参考にして、
http://linyi-zatta.blogspot.jp/2014/02/sqlserver.html
geometry型のデータを作成しようとしているのですが、作成できません。
手順は
ダウンロードしたCSVファイルを取込テーブルへbulk insert
緯度と経度2つにわかれているfloat型のデータをgeometry型に変換し、別テーブルへ移行
43.041403(カラム名:緯度)
141.31998(カラム名:経度)
といった具合に分かれてます。
こちらをgeometry型に変換、取込テーブルからselectしたものを
別のテーブルに移行したいのですが、geometry型でselectできません。
select geography::STGeomFromText('POINT(緯度 経度)',4326)) from 取込テーブル
というイメージでできるかなと思ってたのですが、上手く行かず。
直接、値を書くやり方は以下で問題ないのですが。
geography::STGeomFromText('POINT(134.993299 34.647755)',4326))
どう、SQL文を作成すればよいのか、ご教示どうかお願いします。
お礼
geometry:: STGeomFromText('POINT(' + CAST([経度] AS varchar)+' '+CAST([緯度] AS varchar)+')',4326) でできました。緯度と経度が逆だったようでして。ありがとうございました。
補足
ありがとうございます。 試してみたところ、 ')' 付近に不適切な構文があります。 と出力されましたので、 4326))のカッコをひとつ取って実行してみましたら、 以下のエラーが表示されちゃいました。 メッセージ 6522、レベル 16、状態 1、行 4 ユーザー定義のルーチンまたは集計 "geography" を実行中に .NET Framework エラーが発生しました: System.FormatException: 24141: 入力の位置 16 には数値が必要です。[緯度] が入力されています。 System.FormatException: 場所 Microsoft.SqlServer.Types.WellKnownTextReader.RecognizeDouble() 場所 Microsoft.SqlServer.Types.WellKnownTextReader.ParsePointText(Boolean parseParentheses) 場所 Microsoft.SqlServer.Types.WellKnownTextReader.ParseTaggedText(OpenGisType type) 場所 Microsoft.SqlServer.Types.WellKnownTextReader.Read(OpenGisType type, Int32 srid) 場所 Microsoft.SqlServer.Types.SqlGeography.ParseText(OpenGisType type, SqlChars taggedText, Int32 srid) 場所 Microsoft.SqlServer.Types.SqlGeography.GeographyFromText(OpenGisType type, SqlChars taggedText, Int32 srid)