OpenLayersの円の半径

半径100mの円を表示

GoogleMap

var p = new google.maps.LatLng(y,x);
var options = {
	clickable: false,
	strokeColor: "#FF0000",
	strokeOpacity: 1.0,
	strokeWeight: 4,
	fillOpacity: 0.0,
	center: p,
	radius: Number(100)
 };
var circle = new google.maps.Circle(options);
circle.setMap(get_map());

google

OpenLayers(その1)

var style = { 
	strokeColor: '#FF0000', 
	strokeOpacity: 1.0,
	strokeWidth: 5,
	fillOpacity: 0
};

var lonlat =  layer_lonlat_to_map_lonlat(x, y);
var circle = OpenLayers.Geometry.Polygon.createRegularPolygon
(
	new OpenLayers.Geometry.Point(lonlat.lon, lonlat.lat),
	100,
	20,
	0
);
var feature= new OpenLayers.Feature.Vector(circle, null, style);
layer_vector.addFeatures(feature);

osm1

何か半径が違う!

OpenLayers(その2)

以下にしたがって各頂点の座標を求めてVectorとして表示

var apex = 40;
var latlon = new OpenLayers.LonLat(x, y);
var angle;
var new_lonlat;
var points = [];
for (var i = 0; i < apex+1; i++) {
	angle = (i * 360 / apex) + 0;
	new_lonlat = OpenLayers.Util.destinationVincenty(latlon, angle, radius);
	points.push([new_lonlat.lon, new_lonlat.lat]);
}

黒い円(ちょっと切れているが)

osm2
どうやら、こちらのほうがよい。
OpenLayers.Util.destinationVincentyは測地線からの距離と角度を指定して座標を求めるらしい。
今度、値を確認しよう