緯度・経度の10進数・60進数変換
カテゴリー: Google Maps API for Flash
投稿日: 2010/01/15 23:11
Google Mapsでは、緯度・経度を10進数で表現している。
この座標を60進数に変換する方法を紹介する。
10進数を60進数に変換するための計算式は、以下の通り。
次に10進数に変換するための計算式は、以下の通り。
この計算式を利用して、地図上でクリックした地点の座標を10進数と60進数で表示してみた。
この座標を60進数に変換する方法を紹介する。
10進数を60進数に変換するための計算式は、以下の通り。
39.701683 (10進数) 度 = int(39.701683) = 39 分 = int((39.701683 - 39) * 60) = int(0.701683 * 60) = 42.10098 = 42 秒 = int(0.10098 * 60 * 1000) / 1000 = 6058 / 1000 = 6.058 39.42.6.058 (60進数)
次に10進数に変換するための計算式は、以下の通り。
39.42.6.058 (60進数)
(1)度はそのまま 39
(2)分を60で割る 42/60 = 0.7
(3)秒を3600で割る 6.058/60/60 = 0.0016827
(1)から(3)を足す
(1)+(2)+(3) = 39 + 0.7 + 0.0016827
= 39.7016827
39.7016827 (10進数)
この計算式を利用して、地図上でクリックした地点の座標を10進数と60進数で表示してみた。
import com.google.maps.LatLng;
import com.google.maps.Map;
import com.google.maps.MapEvent;
import com.google.maps.MapType;
import com.google.maps.controls.ZoomControl;
import com.google.maps.overlays.MarkerOptions;
import com.google.maps.overlays.Marker;
import com.google.maps.MapMouseEvent;
import com.google.maps.InfoWindowOptions;
var map:Map = new Map();
map.addControl(new ZoomControl());
map.key = "";
map.setSize(new Point(stage.stageWidth, stage.stageHeight));
map.addEventListener(MapEvent.MAP_READY, onMapReady);
map.addEventListener(MapMouseEvent.CLICK, onMapClick);
this.addChild(map);
function onMapReady(event:Event):void {
map.setCenter(new LatLng(39.701683, 141.136369), 16, MapType.NORMAL_MAP_TYPE);
}
function onMapClick(event:MapMouseEvent):void {
var latLng:String = event.latLng.toString();
var lat:String = degree2dms(event.latLng.lat());
var lng:String = degree2dms(event.latLng.lng());
var str:String = latLng + " (" + lat + "," + lng + ")";
map.openInfoWindow(event.latLng,
new InfoWindowOptions({title: "You clicked the map!", content: str}));
}
/**
* dd.mm.ss に変換する
* @param degree 135.121536
*/
function degree2dms(degree:Number):String{
var dd:Number = Math.floor(degree);
var mm:Number = (degree - dd) * 60;
var ss:Number = mm - Math.floor(mm);
mm = Math.floor(mm);
ss = (ss * 60 * 1000) / 1000;
return dd.toString() + "." + mm.toString() + "." + ss.toString();
}
/**
* degree に変換する
* @param dms 135.12.1536
*/
function dms2degree(dms:String):String{
var dms_array:Array = dms.split(".");
var d0:Number = Number(dms_array[0]);
var d1:Number = Number(dms_array[1]);
var d2:Number = Number(dms_array[2]+"."+dms_array[3]);
return (d0 + (d1/60) + (d2/60/60)).toString();
}
Adobe Flash Playerが必要です
Google Maps API for Flash