半径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());
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);
何か半径が違う!
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]); }
黒い円(ちょっと切れているが)
どうやら、こちらのほうがよい。
OpenLayers.Util.destinationVincentyは測地線からの距離と角度を指定して座標を求めるらしい。
今度、値を確認しよう