Я использую 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;
, но все равно не повезло. Любая помощь будет принята с благодарностью.