緯度と経度をgeometry型に変換する方法

このQ&Aのポイント
  • 質問者は、位置参照情報ダウンロードサービスからダウンロードしたデータを利用して、SQLServerで地図データ(緯度経度)を検索しようとしています。
  • 具体的には、ダウンロードしたCSVファイルを取り込みテーブルに`bulk insert`し、緯度と経度の値をgeometry型に変換して別のテーブルに移行したいと考えています。
  • しかし、質問者はgeometry型のデータの作成とselect文の作成について困っています。直接値を書く方法は問題ありませんが、ダウンロードしたデータを利用する方法がわかりません。ご教示をお願いします。
回答を見る
  • ベストアンサー

緯度と経度をgeometry型に変換

位置参照情報ダウンロードサービス 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文を作成すればよいのか、ご教示どうかお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8481/19299)
回答No.1

'と'で括られた中のフィールド名は[]で括る。 select geography::STGeomFromText('POINT([緯度] [経度])',4326)) from 取込テーブル

boooone
質問者

お礼

geometry:: STGeomFromText('POINT(' + CAST([経度] AS varchar)+' '+CAST([緯度] AS varchar)+')',4326) でできました。緯度と経度が逆だったようでして。ありがとうございました。

boooone
質問者

補足

ありがとうございます。 試してみたところ、 ')' 付近に不適切な構文があります。 と出力されましたので、 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)

関連するQ&A

  • 全国市町村の経度緯度データが欲しい。

    ネット上でフリーのダウンロードサイトがありますが、市町村の情報が数年前のもので、合併のあった市町村はデータがありません。 最近の市町村の経度緯度データを探しています。出来れば一括ダウンロード、できれば無料のものを探しています。 よろしくお願いします。

  • 本社所在地から、緯度経度の取得

    上場企業の本社所在地の住所から、緯度経度の数字を取得したいのですが、うまくいきません。 例えば、 住所データはYahooファイナンスから、http://profile.yahoo.co.jp/biz/fundamental/6495.html 緯度経度は、国土交通省からhttp://nlftp.mlit.go.jp/cgi-bin/isj/dls/_view_prefectures.cgi というのをダウンロードしてみましたが、国土交通省のデータには漏れが多いのか、この場合でも 銀座西という地名が見つからず、本社住所から緯度経度に変換できません。 何か良い方法はないものでしょうか? 宜しくお願いします

  • 市町村名(経度緯度あり)の一覧を探しています。

    以下の条件を全て満たす市町村名一覧を探しています。 無料だとベストですが有料でも結構ですので最新データが 得られるサイトがありましたら教えて下さい。 ・全国の市町村名を網羅(丁目、字まで) ・全データの経度緯度(市役所、区役所、村役場の座標、その他住所) ・全ての名称にふりがながある。 ・エクセルファイルもしくはテキストデータもしくはSQLにて 一覧データが取得可能。 条件が難しいとは思いますが是非ともご協力お願い致します。

  • GoogleMapAPI - デフォルト表示したマーカーから緯度経度を取得できない

    最近googleMapを利用しデータベースと連携して コミュニケーションツールを作れないかとあれこれ 本やネットで調べた知識でがんばっているのですが、 行き詰まってしまったのでどなたかお知恵をお貸し下さい。 ◇前提 ・googleMapのページアクセス時に  DBに登録済みのマーカー情報(緯度・経度・場所名称)を基に  複数のマーカーを表示する  ※DBとのデータ中継はPHPを使用。ここでは省略。 ◇問題点 ・表示された複数のマーカーのうちどれかをクリックしたとき  そのマーカーに付随するデータをフォーム上に表示したいが、  DBへの問い合わせに必要なクリックしたマーカーの緯度経度が  取得できない。 以下抜粋 ------------------------------------------------- // 登録済みマーカーをデフォルト表示 GDownloadUrl("load.php", function(doc, stat){ var load = doc.parseJSON(); for(var i=0; i<load.data.length; i++){ var point = new GLatLng(load.data[i].lat, load.data[i].lng); var marker = new GMarker(point); map.addOverlay(marker); // クリックしたマーカーに該当する情報を表示 GEvent.addListener(marker, "click", function(){ //*** ここで緯度経度を取得 **** } } }); ------------------------------------------------- http://oshiete1.goo.ne.jp/qa2559818.html 上記ページの質問に対する回答の方法も試しましたが、 エラーが出てしまい解決できませんでした。 プログラム素人な上、不慣れな分野にて行き詰まってます。 どうかお助け下さい。

  • MYSQL バイナリーデータに変換して取得

    MYSQLでSELECTして以下のテーブルのCODEカラムからバイナリーデータに変換してデータを取得したいのですが、どうしたら良いでしょうか? SELECT CODE FROM TABLE_NEME WHERE ID='XXX' <テーブルデータ> CODE(varchar型) 011A00046D0ADC4B

    • ベストアンサー
    • MySQL
  • SQLServer2000でデータ数が10万くらいあるテーブルから、

    SQLServer2000でデータ数が10万くらいあるテーブルから、 OrderByやTopなどのSQL文を使用すると、 SELECTに数秒かかってしまいます。 該当のカラムを主キーにはできないですが、 インデックス化?みたいなことをして、 SELECTを短時間化できないでしょうか?

  • 2つのテーブルで引き算 postgres

    SELECT point FROM point_1 where id = 1; SELECT point FROM point_2 where id = 1; 別のテーブルの同じカラムで引き算をしたいです。 どうすればいいのでしょうか?

  • テーブル名を[]でくくらないとエラーになってしまう

    テーブル名を[]でくくらないとエラーになってしまいます sqlserver 2008 express edition を利用しているのですが テーブル名 やカラム名に[]でくくってSQL文を実行しないと エラーが出てしまいます 例えば select * from [table]  の様にしないといけません これを select * from table で実行できるようにしたいのです どうしたらいいのでしょうか 会社ではsqlserver2005を利用しているので 2008からは[]でくくる必要になったのでしょうか それとも初期設定で何かしないといけないのでしょうか 設定方法を教えて下さい sqlserver management studio2008もインストール済みです

  • 複数のテーブルからデータを取得したい

    1つのテーブルから重複したデータを取り除いて表示するときに使う 【select distinct カラム名 from テーブル名;】 がありますよね。 それと同じようなことを複数のテーブルをまたいで行いたいのですがうまくいきません。 ちなみに両方のテーブルのカラム名は同じです。 【select distinct カラム名 from テーブル1 union select distinct カラム名 from テーブル2;】 としても重複を取り除いた後にテーブルを結合してるので結果的に両テーブルの重複した値を取り除くことができず。 そこで 【select distinct T1.カラム名, T2.カラム名 from テーブル1 T1. テーブル2 T2;】 としてみたのですが、クエリを実行中のまま反応がないので悩んでます。 ちなみに2つのテーブルのデータはそれぞれ2万件ほどです。 こういう時どういうsql文を組むのが正しいのでしょうか?

    • ベストアンサー
    • MySQL
  • googleマップAPIにて緯度経度に加えてズームレベルを取得する方法がわかりません

    こんにちは、いつもお世話になっています <head> <script src="http://maps.google.com/maps?file=api&v=2&key=googleマップキー" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> //<![CDATA[ function onGMapClick(overlay, point) { if (point) { var request = GXmlHttp.create(); var url = "/php/date.php" + "?x=" + point.x + "&y=" + point.y; request.open("GET", url, true); request.onreadystatechange = function() { if (request.readyState == 4) { var xmlDoc = request.responseXML; var xy = xmlDoc.documentElement.getElementsByTagName("xy"); document.getElementById("show_x").innerHTML = xy[0].getAttribute("x"); document.getElementById("show_y").innerHTML = xy[0].getAttribute("y"); } } request.send(null); } } function onLoad() { var map = new GMap2(document.getElementById("map")); map.addControl(new GSmallMapControl()); map.addControl(new GMapTypeControl()); map.setCenter(new GLatLng(36.03, 139.15), 13); GEvent.addListener(map, 'click', onGMapClick); } //]]> </script> </head> <body onload="onLoad()"> <div id="map" style="width:450px; height:450px"></div> <P>x : <div id="show_x"></div></P> <P>y : <div id="show_y"></div></P> </body> http://www.geekpage.jp/web/google-maps-api/gxmlhttp-5.php ここのサイトのソースを参考にgoogleマップAPIを利用したサイトを制作しています 経度、緯度の取得はできたのですが、残りのズームレベルの取得がいろいろ試してみましたができません このソースで「経度」「緯度」「ズームレベル」を取得して、変数urlに格納された/php/date.phpにデータを渡したいのですが、現在のズームレベルですら取得できない有様です どなたか教えていただけないでしょうか