下記の経度緯度を変換する為のコードを教えてください。
googlemapで利用していた経度緯度をmapfanの携帯サービスで利用したいです。
(たぶん preg_match 使うんだと思いますが。。。正規表現が勉強不足です。)
$lat = "39.710800"; //経度
$lng = "141.152435"; //緯度
■求める結果
経度:39.71.08.00
緯度:141.15.24.35
入力値は、緯度・経度とも、整数部分1~3桁(符号無し)、小数部分6桁固定と想定しています。
ご質問にあった preg_match を使い、こんな感じでいかがでしょうか。
$lat = "39.710800"; //経度 $lng = "141.152435"; //緯度 $pat = '/(\d{1,3})\.(\d{2})(\d{2})(\d{2})/'; unset($arr); $arr = array(); preg_match($pat, $lat, $arr); if (count($arr) != 5) { echo 'lat error!!'; exit(1); } $lat2 = sprintf("%d.%02d.%02d.%02d", $arr[1], $arr[2], $arr[3], $arr[4]); unset($arr); $arr = array(); preg_match($pat, $lng, $arr); if (count($arr) != 5) { echo 'lng error!!'; exit(1); } $lng2 = sprintf("%d.%02d.%02d.%02d", $arr[1], $arr[2], $arr[3], $arr[4]); echo 'lat: ' . $lat . ' => ' . $lat2 . '<br />'; echo 'lng: ' . $lng . ' => ' . $lng2 . '<br />';
<?php $lat = "39.710800"; //経度 $lng = "141.152435"; //緯度 echo preg_replace("/\.(\d{2})(\d{2})(\d{2})/",".$1.$2.$3",$lat); echo "<br />"; echo preg_replace("/\.(\d{2})(\d{2})(\d{2})/",".$1.$2.$3",$lng); ?>|
小数点以下を2桁ずつに区切らせてます。
¥d{2}は数字2桁ずつを意味していて
$1は一つ目
$2は二つ目
$3は三つ目
の値がそれぞれに入りますのでピリオドを入れた形に直しています。
ありがとうございます。
preg_match じゃなくて preg_replace の方がシンプルにいきそうですね。
入力値は、緯度・経度とも、整数部分1~3桁(符号無し)、小数部分6桁固定と想定しています。
ご質問にあった preg_match を使い、こんな感じでいかがでしょうか。
$lat = "39.710800"; //経度 $lng = "141.152435"; //緯度 $pat = '/(\d{1,3})\.(\d{2})(\d{2})(\d{2})/'; unset($arr); $arr = array(); preg_match($pat, $lat, $arr); if (count($arr) != 5) { echo 'lat error!!'; exit(1); } $lat2 = sprintf("%d.%02d.%02d.%02d", $arr[1], $arr[2], $arr[3], $arr[4]); unset($arr); $arr = array(); preg_match($pat, $lng, $arr); if (count($arr) != 5) { echo 'lng error!!'; exit(1); } $lng2 = sprintf("%d.%02d.%02d.%02d", $arr[1], $arr[2], $arr[3], $arr[4]); echo 'lat: ' . $lat . ' => ' . $lat2 . '<br />'; echo 'lng: ' . $lng . ' => ' . $lng2 . '<br />';
丁寧なコードありがとうございます。
勉強してみます。
丁寧なコードありがとうございます。
勉強してみます。