Я использую библиотеку OpenLayers для отображения некоторых точек на карте. Я хочу показать только 10-километровую зону от центральной точки. Может ли кто-нибудь помочь мне в этом?

Вот фрагмент моего кода.

 var map = new Map({
      layers: [
        new TileLayer({
          source: new OSM()
        }),
        vectorLayer
      ],
      target: 'map',
      view: new View({
        center: transform([19.83752162, 52.09696925], 'EPSG:4326', 'EPSG:3857'),
        zoom: 12,

      })
    });
0
Nizar Ali Hunzai 22 Ноя 2019 в 00:56
1
Вы можете установить параметр maxResolution в представлении (необходимое значение будет зависеть от размера вашей карты)
 – 
Mike
22 Ноя 2019 в 02:04
MaxResolution предотвращает уменьшение масштаба, но позволяет панорамировать. Если вы никогда не хотите панорамировать более чем на 10 км, вы можете установить параметр экстента в виде (только в OpenLayers 6).
 – 
Mike
22 Ноя 2019 в 02:07

1 ответ

Для этого вам нужно выполнить некоторую предварительную обработку перед инициализацией карты.

1- Сделать элемент из координат центра.

let pointFeature = new ol.Feature(
    new ol.geom.Point(transform([19.83752162, 52.09696925], 'EPSG:4326', 'EPSG:3857'))
);

2- Получить степень созданного выше объекта.

let poitnExtent = pointFeature.getGeometry().getExtent();

3- Буферизируйте экстент до желаемого радиуса.

let bufferedExtent = new ol.extent.buffer(poitnExtent, raduis goes here (In meters));

4- Используйте этот буферизованный экстент для инициализации карты.

var map = new Map({
  layers: [
    new TileLayer({
      source: new OSM()
    }),
    vectorLayer
  ],
  target: 'map',
  view: new View({
    center: transform([19.83752162, 52.09696925], 'EPSG:4326', 'EPSG:3857'),
    extent: bufferedExtent,
    zoom: 12,

  })
});
2
Naseer 22 Ноя 2019 в 10:04
Вы даже можете пропустить создание объекта, так как одной геометрии достаточно, например: const pointExtent = new ol.geom.Point(transform([19.83752162, 52.09696925], 'EPSG:4326', 'EPSG:3857')).getExtent();
 – 
Rob
22 Ноя 2019 в 12:34
Остерегайтесь расстояний в 3857, они не надежны, особенно в северных широтах как в ОП
 – 
JGH
22 Ноя 2019 в 16:38