gpt4 book ai didi

c# - 如何使用 sharpmap 在地球上渲染一个国家的图像

转载 作者:行者123 更新时间:2023-11-30 12:21:12 26 4
gpt4 key购买 nike

我在 SQL 数据库中有一个区域边界列表,我正在使用 sharpmap 为我需要的每个国家渲染缩略图。效果非常好。

但我想更进一步,在它周围添加一个小地球仪并将国家/地区定位在它在地球仪上的位置,但我不知道从哪里开始。

这是我目前用来渲染国家大拇指的代码。有什么想法吗?

var map = new Map(new Size(command.Width, command.Height));
map.BackColor = Color.Transparent;
var countryGeometry = GeometryFromWKT.Parse(command.CountryLevelWkt);
IProvider countryProvider = new GeometryFeatureProvider(countryGeometry);
var countryLayer = new VectorLayer("country", countryProvider);
var borderColor = System.Drawing.ColorTranslator.FromHtml(command.BorderColor);
countryLayer.Style.EnableOutline = true;
countryLayer.Style.Outline = new Pen(borderColor);
countryLayer.Style.Outline.Width = command.BorderWidth;
countryLayer.Style.Fill = Brushes.Transparent;

var transformationFactory = new CoordinateTransformationFactory();
countryLayer.CoordinateTransformation = transformationFactory.CreateFromCoordinateSystems(
GeographicCoordinateSystem.WGS84,
ProjectedCoordinateSystem.WebMercator);
map.Layers.Add(countryLayer);
var bottomLeft = new Coordinate(command.Extents.BottomLeft.Longitude, command.Extents.BottomLeft.Latitude);
var topRight = new Coordinate(command.Extents.TopRight.Longitude, command.Extents.TopRight.Latitude);


// transformations
var bottomLeftLongLat = countryLayer.CoordinateTransformation.MathTransform.Transform(bottomLeft);
var topRightLongLat = countryLayer.CoordinateTransformation.MathTransform.Transform(topRight);
map.ZoomToBox(new Envelope(bottomLeftLongLat, topRightLongLat));
var img = map.GetMap();
return img;

最佳答案

  1. 首先在一张新 map 上绘制所有国家/地区,每个国家/地区都在自己的图层上。
  2. 在自己的图层上画出您感兴趣的国家/地区。
  3. 将 map 中心设置为第 2 步图层的 Envelope.Center。例如,如果绘制澳大利亚, map 将向左移动。
  4. 将 map 渲染为图像。在绘图表面上绘制图像 (System.Drawing.Graphics)。
  5. 重新居中 map ,以覆盖空白区域。例如,如果绘制澳大利亚,将 map 几乎一直向右移动。您将需要以编程方式计算出这些偏移量。
  6. 将第 5 步中的 map 渲染为图像。将图像添加到同一绘图表面(参见步骤 4)。
  7. 重复第 5-6 步,覆盖第 3 步渲染图下方/上方的空白区域。

举个例子: Sample form with map rendering

注意:

  • 澳大利亚在中间
  • 鼠标指针附近的 map 图层之间存在间隙(屏幕截图中的间隙是为了演示逻辑)
  • 有些国家/地区非常大(例如俄罗斯),获得 Envelope.Center 效果不佳 - 考虑仅基于最大的多边形居中

这是一个示例 Windows Forms project .在示例中,我使用了来自 http://thematicmapping.org/downloads/world_borders.php 的 map 。 .

关于c# - 如何使用 sharpmap 在地球上渲染一个国家的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46603279/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com