/*
引数はY.Circle()に準拠
ただし、options.unitは"km"と想定
*/
function pseudoCircle(latlng, radius, options) {
// 360角形で近似
var vertex = 360;
// 赤道半径(m) (WGS-84)
var EquatorialRadius = 6378137;
// 扁平率の逆数 : 1/f (WGS-84)
var F = 298.257223563;
// 離心率の2乗
var E = ((2 * F) -1) / Math.pow(F, 2);
// 赤道半径 × π
var PI_ER = Math.PI * EquatorialRadius;
// 1 - e^2 sin^2 (θ)
var TMP = 1 - E * Math.pow(latlng.latRadians(), 2);
// 経度1度あたりの長さ(m)
var arc_lat = (PI_ER * (1 - E)) / (180 * Math.pow(TMP, 3/2));
// 緯度1度あたりの長さ(m)
var arc_lng = (PI_ER * Math.cos(latlng.latRadians())) / (180 * Math.pow(TMP, 1/2));
var points = new Array();
for (var i = 0; i <= vertex; i++) {
var rad = (i / (vertex / 2)) * Math.PI;
var lat = (radius.height * 1000 / arc_lat) * Math.sin(rad) + latlng.lat();
var lng = (radius.width * 1000 / arc_lng) * Math.cos(rad) + latlng.lng();
points[i] = new Y.LatLng(lat, lng);
}
return new Y.Polygon(points, options);
}
OKWave系のq5546321でgoogle mapsのほうにリンクされている、「東京スカイツリーが見える範囲」を相変わらずサンプルにしています。中心点は (35.710139, 139.810833)、半径は95,330mにしています。(この範囲でスカイツリーが見えることを保障するわけではありません!念のため)