给出中心和方形宽度的小叶方形

时间:2016-02-04 16:21:43

标签: javascript leaflet latitude-longitude angular-leaflet-directive

在传单上,我可以根据中心和半径轻松创建一个新圆圈:

// Circle
var radius = 500; // [metres]
var circleLocation = new L.LatLng(centreLat, centreLon);
var circleOptions = {
    color: 'red',
    fillColor: '#f03',
    fillOpacity: 0.5
};
var circle = new L.Circle(circleLocation, radius, circleOptions);
map.addLayer(circle);

上面的圆圈创建和绘制没有问题,所以它就是全部。

但是,如果我现在想要创建并绘制一个限定圆的矩形,它就不起作用。这是我做的:

// Rectangle
var halfside = radius;   // It was 500 metres as reported above
// convert from latlng to a point (<-- I think the problem is here!)
var centre_point = map.latLngToContainerPoint([newCentreLat, newCentreLon]);
// Compute SouthWest and NorthEast points
var sw_point = L.point([centre_point.x - halfside, centre_point.y - halfside]);
var ne_point = L.point([centre_point.x + halfside, centre_point.y + halfside]);
// Convert the obtained points to latlng
var sw_LatLng = map.containerPointToLatLng(sw_point);
var ne_LatLng = map.containerPointToLatLng(ne_point);
// Create bound
var bounds = [sw_LatLng, ne_LatLng];
var rectangleOptions = {
    color: 'red',
    fillColor: '#f03',
    fillOpacity: 0.5
};
var rectangle = L.rectangle(bounds, rectangleOptions);
map.addLayer(rectangle);

我获得的矩形大小与500米无关。此外,看起来矩形的大小取决于地图的缩放级别。圈子中没有出现这些问题。

我怀疑我将纬度/经度转换为点的方式,反之亦然。

2 个答案:

答案 0 :(得分:2)

只需使用getBounds继承自L.Circle的{​​{1}}方法:

  

返回路径的LatLngBounds。

http://leafletjs.com/reference.html#path-getbounds

L.Path

关于Plunker的工作示例:http://plnkr.co/edit/n55xLOIohNMY6sVA3GLT?p=preview

答案 1 :(得分:0)

我收到“Cannot read property 'layerPointToLatLng' of undefined”错误,所以我对 iH8 的回答做了一些更改。

var grp=L.featureGroup().addTo(map);
var circle=L.circle([0,0],{radius:<circle radius>}).addTo(grp);
L.rectangle(circle.getBounds()).addTo(this.bufferMap);
map.removeLayer(grp);