Как правильно инициализировать уровень масштабирования в объекте SharpMap?

Я работаю с объектом MapBox из SharpMap в приложении Windows Forms C# и не могу найти, как заставить работать уровень масштабирования. Объект MapBox находится в объекте TabControl.

Этот класс вызывается после основного вызова InitializeComponent() в моем приложении.

public void InitializeMap(SharpMap.Forms.MapBox mapBox)
        {
            mapBox.Map.BackgroundLayer.Add(new SharpMap.Layers.TileAsyncLayer(
                new BruTile.Web.OsmTileSource(), "OSM"));

            mapBox.Map.Zoom = 10; //
            mapBox.Refresh();
        }

Какое бы значение не было записано для атрибута mapBox.Map.Zoom, это всегда один и тот же высокий уровень масштабирования.

С другой стороны, если я использую вызов mapBox.Map.ZoomToExtents(), он корректно приближается к экстентам слоя OSM.

Я полагаю, что делаю неправильно простую вещь, но я не могу найти, в чем проблема.


person kaycee    schedule 16.06.2016    source источник


Ответы (1)


mapBox.Map.Zoom всегда совпадает с mapBox.Map.Envelope.Width.

Вместо того, чтобы просто установить масштаб таким образом, попробуйте использовать mapBox.Map.ZoomToBox(new GeoAPI.Geometries.Envelope(-5.0, 5.0, -5.0, 5.0)). Карта будет расположена и масштабирована таким образом, чтобы вся оболочка находилась внутри карты.

Конверт в моем примере имеет ширину 10, но если ваша карта шире, чем высота, то mapBox.Map.Zoom будет больше, так как (как я говорил выше) его значение такое же, как и ширина видимой части карты .

person Kapten-N    schedule 30.03.2017