x=0.805018,2.415053,4.025088…
y=74.995682,224.987045,374.978394…

などと中心からのx方向、y方向の距離[m]があります。
中心の緯度経度は、
緯度=34.9083333333333
経度=136.5975
です。

c言語でそれぞれのx,yの地点の緯度経度を知る変換プログラムを作りたいのですが、どうすればよいでしょうか。
よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

いろいろと条件が足りません。


・地球上の北緯約34.9度、東経約136.6度、と考えていいのでしょうか?
・x,yはどの方向に対しての距離なのでしょうか?Yの正が北?南?それとも全然違う方角?Xの正は?
・どの程度の誤差まで許容できるの?

誤差が十分に許容できるなら、その緯度/経度付近は球面に接する平面に近似できます。
北緯約34.9度、東経約136.6度、Yの正が北、Xの正が東
とすると、アークタンジェント(x/地球の半径)で東経の、アークタンジェント(y/地球の半径)で北緯の差分の角度が求まります。
計算してませんが、数km程度ならこれで十分なはずです。

それ以上の距離があったり、より高い精度が欲しい、となると、緯度による東西の長さ、曲面上での距離、地球の偏平率などいろんなものを考慮する必要があるでしょう。


    • good
    • 0

2地点の経度・緯度から距離を求めるなら過去の質問にありました。


計算式を改良すればできるかもしれません。

参考URL:http://oshiete.goo.ne.jp/qa/249931.html
    • good
    • 0

無理では。



緯度経度って、3次元座標を示す(ここでは極座標の動径が暗黙的に指定されているはず。)ものだから、xとyの2変数だけでは情報が足りないような。

質問内容を読み違えているだけかもしれませんが。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QGPS(緯度,経度)から,ローカル(局所平面)のXYZ座標を求めるには?

GPSに関して,何度か質問をさせていただいております。
以前,GPS(緯度,経度)から,地心座標系(XYZ)への変換について教えていただきました。
その方法で地心座標系(XYZ)を計算することができたのですが,緯度,経度,平均海水面からの高さ(MSL)から,局所平面(ローカル)座標系(X,Y)を求める方法について悩んでおります。
例を申しますと,平坦地の100m(南北方向100m,東西方向100m)の矩形のラインをGPSで計測し,地心座標系で軌跡を求めると,南北方向の100mに対して,距離が70mの長方形の走行軌跡になってしまいます。
GPSで平面での走行距離や方向を求めたいと思っております。
緯度,経度情報からローカルの平面座標系(X,Y)(m単位)を求める方法をご存知でしたら,教えてください。よろしくお願いします。

Aベストアンサー

お使いのGPS受信機は測量用ではなくごく一般的な低価格の物ですよね?
そうだと一般にC/Aコードと呼ばれる信号のみを使って位置を計算しますから、S/A(意図的な精度劣化)が解除された現在でも場合によっては数十mの誤差が生じる事があります。S/Aがかかっていた頃は百mを越えるのは当たり前でした。
また高度の誤差はその倍以上になります。

ですから一台の受信機である点で測位しその後別の地点に移動して再び測位した場合、確率的には低いですが最悪誤差は倍になります。
通常わずか100m離れた2点であればどういう移動体か存じませんがその間の移動時間は短いでしょうからそのような距離計算みたいな相対位置に大きな誤差が生じることはまず無いと思われますが、もし誤差が大きいとすればそれは測位計算に使われた衛星(の組み合わせ)がその2点で異なる場合が考えられます。この場合は測位位置が急に離れた場所にジャンプします。
またDGPS対応の受信機ならそれを使えば単独測位でも誤差を数m程度に軽減できますがDGPSデータの受信機が別途必要になりますね。

さてお尋ねの座標変換と距離と方位の計算方法は、
国土交通省国土地理院のホームページ
http://www.gsi.go.jp/
から「測地測量と地殻変動」→「便利なプログラム・データ」→「測量計算」とリンクを辿ると
「距離と方位角の計算」や「平面直角座標への換算」というのがありそこからさらに計算式へのリンクがあって
http://vldb.gsi.go.jp/sokuchi/surveycalc/algorithm/
に辿りつきます。
ここに緯度・経度から平面直角座標への変換式や2点間の距離と方位の計算式などへのリンクがあります。

でも様々な距離の計算式で高度を考慮した物はまず見かけません。結局必要な精度内で地球表面を平面とみなしても差し支えない短い距離の2点間で勾配が大きいのなら地心直角座標で三次元的に計算するのがいいでしょう。例えば御殿場から富士山五合目までの走行距離が知りたいならGPS受信機から(通常1秒毎に)出力されるデータを記録しておいて適当な時間間隔の位置データ同士で移動距離を算出しそれを積算すればいいと思います。

山の展望と地図のフォーラムの案内ページ http://www.nifty.ne.jp/forum/fyamap/
の「地図の広場」の「距離と方位に関する議論」もおすすめします。
直接リンクは http://www.nifty.ne.jp/forum/fyamap/kyorihoi.htm

参考URL:http://vldb.gsi.go.jp/sokuchi/surveycalc/algorithm/

お使いのGPS受信機は測量用ではなくごく一般的な低価格の物ですよね?
そうだと一般にC/Aコードと呼ばれる信号のみを使って位置を計算しますから、S/A(意図的な精度劣化)が解除された現在でも場合によっては数十mの誤差が生じる事があります。S/Aがかかっていた頃は百mを越えるのは当たり前でした。
また高度の誤差はその倍以上になります。

ですから一台の受信機である点で測位しその後別の地点に移動して再び測位した場合、確率的には低いですが最悪誤差は倍になります。
通常わずか100m離れた2点であ...続きを読む

Q{x = x>y ? x:y; return x;}

#include <iostream>
using namespace std;

inline int max(int x, int y){x = x>y ? x:y; return x;}

int main()
{
int num1, num2, ans;

cout << "2つの整数を入力して。\n";
cin >> num1 >> num2;

ans = max(num1, num2);

cout << "最大値は" << ans << "です。\n";

return 0;
}
の{x = x>y ? x:y; return x;}の部分の意味が解りません。

Aベストアンサー

inline int max(int x, int y){x = x>y ? x:y; return x;}
これを普通に関数で書くと

int max(int x, int y)
{
x = x>y ? x:y;
return x;
}

です。

x = 部分は右辺の結果が代入されます。これはわかりますよね。
x>y?x:y;
と書くと?より左にある条件式を判定し、その結果が真である場合は:で区切られた左側の値を、偽である場合は右の値を帰します。
x>yが真であればxを、偽であればyを返します。
それが、左辺値xに代入され、関数の戻り値として帰ります。

従って、2つの値をこの関数に入れると、大きいほうの値が帰ることになります。

Qある緯度経度からxメートル離れた緯度経度を求める

中心を、 北緯=34.9083、東経=136.5975 とします。
ここから南に80000メートル、西に80000メートルずらしたとすると、その地点の緯度経度はいくらになるのでしょうか。
それを求める際の計算式を教えていただけないでしょうか。かなり高い精度で求めたいです。
よろしくお願いします。

Aベストアンサー

(1)はさほど難しくないと思います。ただし,与えられたような緯度・経度の精度で求めるのは無理でしょう。ジオイドなど地球形状の詳しいデータが必要になると思います。

地球を周囲4万kmの真球とする近似で計算します。
8×10^4/(4×10^7)×360°= 0.72°
北緯34.91 - 0.72 = 34.19°

4×10^7/(2π)×cos34.91°×ΔΦ = 8×10^4
∴ΔΦ = 0.72°/cos34.91°= 0.88°

東経136.60 - 0.88 = 135.72°

緯度・経度の入った地図上でスケール計測するのがよいと思います。

QC言語で f1(x,y)-f2(x,y) の式は

C言語で f1(x,y)-f2(x,y) の式ってどうなるか教えて下さい。お願いします。

Aベストアンサー

こーなるんじゃないかな?
机上だけでコンパイルしているわけではないので
ミスがあるかも。m(_"_)m
#XとYが動的に変化するグラフを求めたい訳ではないですよね?

#include <stdio.h>

int f1(int x,int y)
{
int z;
//目的の計算式

z=0

return z;
}
int f2(int x,int y)
{
int z;
//目的の計算式

z=0

return z;
}
main ()
{
int X,Y,Z;

X=0; // 好きな数字
Y=0; // 好きな数字


Z=f1(X,Y)-f2(X,Y);

printf("f1(X,Y)-f2(X,Y)=%d\n",Z)
}

Q多くの住所データから緯度経度を求める

住所データから緯度経度を求める方法が今までに質問され、mapionなどのサイトのアドレスバーからコピーするという回答が示されています
例えば、非常に多くの住所データがあり、一件ずつアドレスバーからコピーすることが困難な場合、そうした作業を一度にやってくれるソフトウェア、サイトなどはないでしょうか
住所データはExcelに入っています
宜しくお願い致します

Aベストアンサー

> そうした作業を一度にやってくれる

mapionのサービスを利用して…ってのはやめた方が良いです。
利用規約には明示されていませんが、明らかにサーバに負荷をかけますので、DoS攻撃と見なされます。
サーバが壊れれば、損害賠償請求とかの可能性もありますし…。

--
「住所 緯度 経度」のキーワードで情報収集すると、そういうデータベース、サービスがあるようです。

(財)データベース振興センター - 99717:住所緯度経度DB
http://www.dpc.or.jp/search/daityo2003/data/db_99717.html
INCREMENT P CORP. - 緯度経度付加受託サービス
http://www.incrementp.co.jp/mapfan/idokeido/

など。

Qy=x^2の座標をプロットするプログラム

y=x^2の座標をプロットするプログラムを作ります。
縦にx軸をとります。
実行すると次のようになるようです。

-4________________*
-3________*
-2___*
-1_*
/0*
/1_*
/2___*
/3________*
/4_______________*

/,_はスペースを意味しています。座標は*で表します。
これはCプログラムで、二重ループを使うようです。
とても困っています。
どなたかよろしくお願いします。

Aベストアンサー

めんどくさいからヒントだけ
(1) xをー4~+4まで変化させる。
(2) 各xについて次のことを行う。
(2.1) yの値を計算する。
(2.2) xを表示する。
(2.3) yの数だけスペースを表示する。
(2.4) アスタリスクを表示する。
(2.5) 改行する。
(3) 終了。

Q3点の緯度経度よりそれぞれへの角度を求める(球面三角法にて)

機知の3地点の緯度経度より、
三角形を作ったときの
それぞれの角度の求め方を教えてください。

出来ればエクセルで処理をしたいのですが・・・
 (球面三角法にて完全球面とした時で
  地球半径6,371,000)

Aベストアンサー

球の中心を原点としたXYZ座標を考えると、球面上のある地点の座標は、(r*cos(緯度),r*sin(緯度),r*sin(経度))になりますね。(rは球の半径、z軸が緯度90°、x軸が緯度0°とします。)
球の中心から各地点までのベクトルを考えれば、2地点間の中心角は内積から計算できるので、あとは球面三角の公式から三角形の内角が求められると思います。

三角形の内角をA,B,Cとしてそれぞれに対する辺の中心角をa,b,cとすると、
cos(A)=(cos(a)-cos(b)*cos(c))/(sin(b)*sin(c))
になるそうです。

エクセルの三角関数は、角度がラジアンなので注意が必要です。

Q絶対パスがx,y,zのファイル,ホルダを

c:\p.exeにドラッグしてc:\p.exeを実行したとき
[GetCommandLine()]
はどのようになるのでしょうか?
98se 95 Borland C++5.5 Comlierでは
["c:\p.exe" x y z]
になるのですが
Windows2000 + SP3, VC++ 6.0では
["c:\p.exe" "x" "y" "z"]
となるそうです
Me,Xp,NT,2000でBorland c++5.5 Compiler
ではどうのようになるのでしょうか?

Aベストアンサー

前回の質問の続きとして回答します。
(http://www.okweb.ne.jp/kotaeru.php3?q=543088)

次のようなプログラムにすれば、OSのバージョンに依存しないかと思いますがどうでしょうか?

---------------------------------------------------------
#include <windows.h>
#include <string>

int WINAPI WinMain(HINSTANCE , HINSTANCE, LPSTR, int) {
  
  char param[256], buf[256];
  char *p, *b;
  
  /*パラメータ取得とバッファ初期化*/
  strncpy(param, GetCommandLine() , sizeof(param));
  param[255] = '\0';
  memset(buf, 0, sizeof(buf));
  
  /*引用符の除去*/
  p = param, b = buf;
  while(*p != '\0') {
    if (*p != '\"') {
      *b++ = *p++;
    }
    else {
      p++;
    }
  }
  
  /*ファイル名の区切りを\nにする*/
  for(b = buf + 2; *b != '\0'; b++) {
    if ((*b == ':') && (*(b - 2) == ' ')) {
      *(b-2) = '\n';
    }
  }
  
  /*結果確認*/
  MessageBox(NULL, buf, "File Name", MB_OK);
  return 0;
}

前回の質問の続きとして回答します。
(http://www.okweb.ne.jp/kotaeru.php3?q=543088)

次のようなプログラムにすれば、OSのバージョンに依存しないかと思いますがどうでしょうか?

---------------------------------------------------------
#include <windows.h>
#include <string>

int WINAPI WinMain(HINSTANCE , HINSTANCE, LPSTR, int) {
  
  char param[256], buf[256];
  char *p, *b;
  
  /*パラメータ取得とバッファ初期化*/
  strncpy(param, GetCommandLine() ,...続きを読む

QGPS(緯度,経度)座標から,XYZ座標を求めるには?

GPSの初心者です。GPS受信機から出力されるNMEAのGPGGA等で出力される緯度,経度から,地球を中心とするXYZ座標に変換する場合,
下記のURLの計算式(http://vldb.gsi.go.jp/sokuchi/surveycalc/trans_alg/trans_alg.html)
から求められるようですが,GPSから得られる,緯度,経度以外に,
「楕円体高」,「卯酉線曲率半径」,「ジオイド高」,「第一離心率」,「標高」は,どのようにして求めているのでしょうか?
ご教授ください。
よろしくお願いします。

Aベストアンサー

もし測地系の変更が可能な機種なら WGS-84 を選択します。(通常デフォルトでWGS-84だと思いますが取り扱い説明書をご覧下さい)

GPGGAメッセージ(センテンス)のフォーマットは、
----- 参考文献1のP.87の5行目より引用 ここから -----
$GPGGA,hhmmss.ss,llll.lll,a,yyyyy.yyy,a,Q,NN,H.H,A.A,M,G.G,,M,T.T,RSID*CS<CR><LF>
-------------------- ここまで --------------------
(注意!「G.G,,M」は「G.G,M」の間違いです)
「A.A(可変長)」のフィールドがアンテナ高度(平均海面からの高度)
「G.G(可変長)」のフィールドがジオイド(平均海面)とWGS-84楕円体との高度差です。
ですからお示しのホームページの式の h はこの二つのデータを加算したものになります。

WGS-84楕円体は、赤道半径 a = 6378137[m]、扁平率 f の逆数 1/f = 298.257223563 ですので、
第一離心率 e の二乗 e^2 = 2 * f - f^2 = 0.00669437999014 となり、
卯酉線曲率半径 N = a / sqrt( 1 - e^2 * sin(φ)^2 ) です。
※ただし、φは緯度、「*」は乗算、「/」は除算、「^」はべき乗、sqrt()は平方根関数、sin()は正弦関数をそれぞれ表す。

NMEA-0183フォーマットの説明は次のページが参考になるでしょう。
http://bg66.soc.i.kyoto-u.ac.jp/forestgps/nmea.html

【参考文献】
1.「SVeeSix 6チャンネルGPSセンサ 仕様およびユーザーズマニュアル 第D版」トリンブル ジャパン株式会社
2.土屋淳・辻宏道著「やさしいGPS測量」社団法人 日本測量協会

参考URL:http://bg66.soc.i.kyoto-u.ac.jp/forestgps/nmea.html

もし測地系の変更が可能な機種なら WGS-84 を選択します。(通常デフォルトでWGS-84だと思いますが取り扱い説明書をご覧下さい)

GPGGAメッセージ(センテンス)のフォーマットは、
----- 参考文献1のP.87の5行目より引用 ここから -----
$GPGGA,hhmmss.ss,llll.lll,a,yyyyy.yyy,a,Q,NN,H.H,A.A,M,G.G,,M,T.T,RSID*CS<CR><LF>
-------------------- ここまで --------------------
(注意!「G.G,,M」は「G.G,M」の間違いです)
「A.A(可変長)」のフィールドがアンテナ高度(平均海面からの高度)
「G....続きを読む

Qxのy乗を求める問題で…(ただし、xもyも正の整数値)

xもyも正の整数値を示し、xのy乗の値を算出する問題なのですが、やり方がよくわかりません(;_;)
解法はpowを使うやり方と、for文の多重ループを使ってやるやり方があり、どちらのやり方も試しなさい、、、ということです(;_;)

特によくわからないのがfor文を使ったやり方で、ヒントは
「xの1乗はxです、計算が必要なのは2乗以上の場合。なのでx*=xをy-1回繰り返せばOK」
ということですが、いまいち理解できませんでした。

完成した表は
    1 2 3 4 5
1 1 1 1 1 1
2 2 4 6 8 16
3 3 9 27 81 243
4 4 16 64 256 1024
5 5 25 125 625 3125
といった感じになるそうです。

どなたか教えてください<m(__)m>

xもyも正の整数値を示し、xのy乗の値を算出する問題なのですが、やり方がよくわかりません(;_;)
解法はpowを使うやり方と、for文の多重ループを使ってやるやり方があり、どちらのやり方も試しなさい、、、ということです(;_;)

特によくわからないのがfor文を使ったやり方で、ヒントは
「xの1乗はxです、計算が必要なのは2乗以上の場合。なのでx*=xをy-1回繰り返せばOK」
ということですが、いまいち理解できませんでした。

完成した表は
    1 2 3 4 5
1 1 1 1 ...続きを読む

Aベストアンサー

>#2
0は「正の整数」には含まないのでy = 0は考慮に入れなくていいんじゃないですか?
確かにヒントをベタに実行するとy > 2のときに危険ですが。

int i, ans; // ループカウンタと解
ans = x;
for(i = 0; i < y - 1; i ++) ans *= x;

となりますか。


人気Q&Aランキング