• 締切済み

プログラム言語でネットのデータを取りに行く方法

ネット上にデータセットがあり、それにアクセスして値を取りに行くことできるようになっています。例えば緯度経度(X, Y) を投入すると、その点の標高を出力することができるシステムがあります。国土地理院の地形標高データなのですが、以下のようになっています。 http://cyberjapandata2.gsi.go.jp/general/dem/scripts/getelevation.php?lon=140.08531&lat=36.103543&callback=myfunc 東経140.08531°、北緯36.103543°を指定していることが分かります。 これをブラウザに入力すると、ページが変わってちょっとごちゃごちゃしますが、標高値が出ます。 この過程をプログラムの中に含めると、100万点ぐらいの標高もすぐに取得できるのですが。 イメージとしてはこんなものです。 do i=1,nx do j=1,ny xlon=... xlat=... call zz( "http://cyberjapandata2....", xlon, xlat, zz) z(i,j) = zz enddo enddo . 実際にプログラム言語でこのようなことは可能なのでしょうか。 一応、fortranだとありがたいです。Cは不得意ですが、何とかなります。このようなネット関係のプログラミングはjavaがいいのでしょうか。 よろしくお願いします。

みんなの回答

  • titokani
  • ベストアンサー率19% (341/1726)
回答No.4

>一方、スマホアプリの標高はどうやっているんだろうという疑問が出てきます。 推測ではありますが、地図情報と一緒に標高データメッシュも読み込んで、補間はクライアント側で行っているものと思います。 補間自体は、線形補間で十分ですので、難しいものではありません。 http://ipr20.cs.ehime-u.ac.jp/column/gazo_syori/chapter3.html あとは国土地理院のGMLデータ http://fgd.gsi.go.jp/download/menu.php をどうやってfortranに読み込むかですが、GMLはテキストファイルですので、一回限りでいいのであれば、テキストエディタのマクロと置換でだいたいのところは変換できるのではないかと思います。 あるいはfortran用のXMLライブラリを使う方法でしょうか。

skmsk1941093
質問者

お礼

回答ありがとうございます。地図を表示した時点で必要な標高データを渡しておいてあとはポインタで示した点の値を内挿しているわけですね。そうしたらクオリティはクライアントに一時的にでも渡したデータで決まるということですね。 GMLデータは最終的にはx,y,zデータの組み合わせになるところまでは変換できました。数万~数十万組まで出てきてその情報を背景として希望の緯度経度値から標高を出すアルゴリズムを考える必要がありますが。こうなりますとネットプログラムではなく、スタンドアロンの処理になりますが。

  • titokani
  • ベストアンサー率19% (341/1726)
回答No.3

こちらの「使用上の注意」にありますが、 http://maps.gsi.go.jp/development/api.html -- 地理院標高APIを提供するサーバに過度の負担を与えないでください。過度の負担を与えると判断したアクセスについて、国土地理院は予告なく遮断を行う場合があります。 -- ということですので、 >この過程をプログラムの中に含めると、100万点ぐらいの標高もすぐに取得できるのですが。 100万点もリクエストしてはいけません。 100万点を取得するのに1年くらいかけるなら大丈夫かもしれませんが。

skmsk1941093
質問者

お礼

回答ありがとうございます。 地理院のサーバには制限があることがわかりました。一方、スマホアプリの標高はどうやっているんだろうという疑問が出てきます。クリックしたところの標高が出るのではなく、ポインタを横滑りさせただけで標高値がサラサラと変化します。カクカクと変化するのではないみたいです。この技術はどうなってるんだろうと思いました。以前からこのようなデータが欲しいと思っており、データセットそのものが整備されていないときは専門業者が役所から請け負って作業していたように思います。スマホでいくらでも情報が引き出せるので時代が変わったんだなと思ったところなのですが。そのような事情なので地理院に拘っているわけではないのです。

  • hiodraiu
  • ベストアンサー率15% (451/2846)
回答No.2

リクエストを投げるの(当然レスポンスもHTTP) にHTTPを使うので、少なくともTCP/IPのライブラリは最低限必要ですね。できればHTTPまで対応してると楽ですね。レスポンスの文字列から任意の部分を抽出するのに正規表現が使えると楽そうですね。 fortranは永らく触ってないので、忘れちゃいましたが、C/C++なら問題なく出来ると思います。javaやC#でも出来ると思います。その他スクリプトでも十分可能だと思います。

  • catpow
  • ベストアンサー率24% (620/2527)
回答No.1

>>実際にプログラム言語でこのようなことは可能なのでしょうか。 可能です。 >>一応、fortranだとありがたいです。Cは不得意ですが、何とかなります。このようなネット関係のプログラミングはjavaがいいのでしょうか。 Excelでよく使われる、ExcelVBAとかC#など、いろんな言語で可能です。 とはいえ、C#などのようにWeb処理に向いたライブラリがそろっている言語を使うと作成が容易です。 FortranはWeb系の処理であまり使われないと思えますので、作れるとしても難易度が高そうですね。 最近のネットでの評価では、「javaはオワコン」だという評価が出てます。 なので、ゼロから勉強されるなら、javaはやめたほうがいいです。