leaflet
Version:
JavaScript library for mobile-friendly interactive maps
75 lines (60 loc) • 1.54 kB
JavaScript
/*
* L.CircleMarker is a circle overlay with a permanent pixel radius.
*/
L.CircleMarker = L.Path.extend({
options: {
fill: true,
radius: 10
},
initialize: function (latlng, options) {
L.setOptions(this, options);
this._latlng = L.latLng(latlng);
this._radius = this.options.radius;
},
setLatLng: function (latlng) {
this._latlng = L.latLng(latlng);
this.redraw();
return this.fire('move', {latlng: this._latlng});
},
getLatLng: function () {
return this._latlng;
},
setRadius: function (radius) {
this.options.radius = this._radius = radius;
return this.redraw();
},
getRadius: function () {
return this._radius;
},
setStyle : function (options) {
var radius = options && options.radius || this._radius;
L.Path.prototype.setStyle.call(this, options);
this.setRadius(radius);
return this;
},
_project: function () {
this._point = this._map.latLngToLayerPoint(this._latlng);
this._updateBounds();
},
_updateBounds: function () {
var r = this._radius,
r2 = this._radiusY || r,
w = this._clickTolerance(),
p = [r + w, r2 + w];
this._pxBounds = new L.Bounds(this._point.subtract(p), this._point.add(p));
},
_update: function () {
if (this._map) {
this._updatePath();
}
},
_updatePath: function () {
this._renderer._updateCircle(this);
},
_empty: function () {
return this._radius && !this._renderer._bounds.intersects(this._pxBounds);
}
});
L.circleMarker = function (latlng, options) {
return new L.CircleMarker(latlng, options);
};