緯度データを度に変換する方法

7 views (last 30 days)
緯度データを,度に変換したいと思っています。
「27-12.38N」を「27.206」(27+12.38/60)のように,単位を°に統一したいと考えています。
緯度データは,上記のようなものがtableで,10×1で入っています。
同様に,経度データも,「127-35.30E」のように入っており,同じようにしたいと思っています。
困っていることは以下です。
・計算方法は分を度に変換するだけなので27+12.38/60でよいが,緯度データのstringから,どのように文字を抜き出せば良いか方法がよくわからないため,処理ができない。
・File Exchangeなどで適切なものがあれば教えていただきたい。
ご教示くださいますと幸いです。よろしくお願いいたします。

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 15 May 2022
質問文に掛かれていない要件は、緯度経度の表現方法を参照して下記の通り補います。
  • 「27-12.38N」に含まれる'-'は符号ではなく、最初の数字(度)と次の数字(分)を分ける記号と想定します。
  • 「27-12.38N」⇒「27.206」と記号Nが消えるので、北緯は+、南緯はー、同様に東経は+、西経はーと想定します。
tbl = table({'27-12.38N'; '127-35.30E'; '35-34.12S'; '135-31.35W'}) % 適当なサンプルデータ
tbl = 4×1 table
Var1 ______________ {'27-12.38N' } {'127-35.30E'} {'35-34.12S' } {'135-31.35W'}
nums = regexp(tbl.Var1,'(\d+)\-(\d+(\.\d+)?)([NESW])','tokens'); % 正規表現で中身を抽出
nums = [nums{:}]; % ネスト状のセル配列を1段階ほどく
for i = nums
texts = [i{:}]
switch texts{3}
case {'N','E'}
num2str(str2num(texts{1}) + str2num(texts{2}) / 60)
case {'S','W'}
num2str(-str2num(texts{1}) + str2num(texts{2}) / 60)
otherwise
end
end
texts = 1×3 cell array
{'27'} {'12.38'} {'N'}
ans = '27.2063'
texts = 1×3 cell array
{'127'} {'35.30'} {'E'}
ans = '127.5883'
texts = 1×3 cell array
{'35'} {'34.12'} {'S'}
ans = '-34.4313'
texts = 1×3 cell array
{'135'} {'31.35'} {'W'}
ans = '-134.4775'
このような方法を任意に変更して適用すればよいと思います。
  3 Comments
Hiroki Takeda
Hiroki Takeda on 16 May 2022
早速にご教示くださり、誠にありがとうございました。
無事に作業を進めることができました。
今後ともよろしくお願いいたします。

Sign in to comment.

More Answers (0)

Products


Release

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!