Как автоматически перемещать / закладывать карту при рендеринге файла KML в thinkgeo Winform Map control - PullRequest
0 голосов
/ 04 февраля 2020

Я использую Think Geo для отображения примера карты, взятого из здесь , в приложении Win form, и я написал функции, чтобы получить путь к файлу KML от пользователя через файловый браузер, а затем вызвать следующую функцию для отображения область, определенная в файле KML.

private void AddKML(string path, string name)
        {
            TextStyle textStyle = new TextStyle("name", (new GeoFont("Arial", 12)), new GeoSolidBrush(GeoColor.StandardColors.DarkOliveGreen));
            textStyle.HaloPen = new GeoPen(GeoColor.StandardColors.FloralWhite, 5);
            textStyle.SplineType = SplineType.ForceSplining;

            KmlFeatureLayer kmlFeatureLayer = new KmlFeatureLayer(path);
            kmlFeatureLayer.StylingType = KmlStylingType.StandardStyling;
            kmlFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.FillSolidBrush = new GeoSolidBrush(new GeoColor(panel1.BackColor.R, panel1.BackColor.G, panel1.BackColor.B));
            kmlFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen = new GeoPen(GeoColor.SimpleColors.Black);
            kmlFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = new LineStyle(new GeoPen(new GeoColor(panel3.BackColor.R, panel3.BackColor.G, panel3.BackColor.B), 5));
            kmlFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle.SymbolPen = new GeoPen(GeoColor.FromArgb(255, new GeoColor(panel2.BackColor.R, panel2.BackColor.G, panel2.BackColor.B)), 8);
            kmlFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = textStyle;
            kmlFeatureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

            LayerOverlay overlay = new LayerOverlay();
            overlay.Layers.Add(name, kmlFeatureLayer);
            winformsMap1.Overlays.Add("overlay_" + name, overlay);
            winformsMap1.CurrentExtent = kmlFeatureLayer.WrappingExtent;
            winformsMap1.Refresh();
        }

Теперь код работает нормально, и область отображается, но есть небольшая проблема: если область находится перед пользовательским обзором, то отображается рендеринг, но если мы вышли Например, мы просматриваем Канаду, и KML представляет какое-то место в Америке, тогда карта не будет автоматически перемещаться / закладываться или автоматически перемещаться в эту область. Я попробовал следующее:

winformsMap1.ZoomToNextExtent();

, а также

winformsMap1.ZoomToPreviousExtent();

, а также

winformsMap1.CurrentExtent = kmlFeatureLayer.WrappingExtent;

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

...