如何在SharpMap对象中正确初始化缩放级别?

时间:2016-06-16 19:38:57

标签: c# .net mapping gis sharpmap

我在Windows Forms C#应用程序中使用SharpMap的MapBox对象,我似乎无法找到如何使缩放级别工作。 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图层的范围。

我想我做错了一件简单的事,但我似乎无法找到问题所在。

1 个答案:

答案 0 :(得分:0)

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,则 FSDirectory index = FSDirectory.open(Paths.get(indexLoc)); IndexReader reader = DirectoryReader.open(index); LeafReaderContext leaf = leaves.get(0); LeafReader atomicReader = leaf.reader(); KNearestNeighborDocumentClassifier knn = new KNearestNeighborDocumentClassifier(atomicReader, BM25, null, 10, 0, 0, "Topics", field2analyzer, "Text"); 将大于此值,因为(如上所述)其值与宽度相同地图的可见部分。