Я предполагаю, что под «28992 координатами» вы имеете в виду EPSG: 28992 Система координат .
Канонический способ использования «нестандартных» CRS в Leaflet - использовать proj4leaflet . Этот ответ предполагает, что вы уже это делаете .
Таким образом, метод getBounds()
для L.Map
всегда возвращает экземпляр L.LatLngBounds
, который ссылается на непроектированные координаты WGS84. Тем не менее, мы можем использовать CRS карты в a L.LatLng
в L.Point
с проецируемыми координатами в CRS отображения карты; например,
var map = L.map('containerId`, { crs: crsForEpsg28992 });
var foo = map.options.crs.project(L.latLng([60.3,21.1]));
var qux = map.options.crs.project(map.getCenter());
Из-за того, как работают проекции карты (они вращают и изгибают координатные пространства), а также из-за того, как реализован proj4 js, невозможно спроецировать ограничивающие box в ограничивающую рамку. (В большинстве случаев проекция ограничивающего прямоугольника будет изогнутым многоугольником !). Это изображение из статьи Грегора Айша иллюстрирует проблему:
Однако мы можем сделать приблизительное значение: спроецировать четыре угла ограничивающей рамки, например:
var mapBounds = map.getBounds();
var crs = map.options.crs;
var nw = crs.project(mapBounds.getNorthWest());
var ne = crs.project(mapBounds.getNorthEast());
var sw = crs.project(mapBounds.getSouthWest());
var se = crs.project(mapBounds.getSouthEast());
Мы даже можем создать L.Bounds
(но не a L.LatLngBounds
!) из этих проецируемых координат; это будет bbox в указанном CRS, который содержит все углы, например:
var bbox = L.bounds([nw, ne, sw, se]);
Это не будет идеальным, но этого приближения должно быть достаточно для большинства случаев использования.
См. также этот рабочий пример (основан на одном из примеров proj4leaflet), который должен дополнительно проиллюстрировать проблему.