形状未绘制在生成的地图图像上

Shape is not getting plotted on the map image generated

我正在尝试从附件中创建地图图像 JSON 该图像显示了正确的位置但未绘制多边形。

只有在一个特征具有圆形的情况下才会发生这种情况,而对于其他形状,它们呈现得很好。

以下函数用于从 json.

创建图像
    public static Image CreateMapImage(string json, 
                KnownTileSource baseMapTile = KnownTileSource.BingRoads)
            {
                double maxX = Double.MinValue,
                    maxY = Double.MinValue,
                    minX = Double.MaxValue,
                    minY = Double.MaxValue;

                var map = new SharpMap.Map(new Size(800, 400));
                map.Layers.Add(new TileLayer(
                    KnownTileSources.Create(
                        baseMapTile, bingKey), "BingRoad"));

                JObject rss = JObject.Parse(json);
                foreach (JObject shape in rss["features"])
                {
                    var jsonReader = new NetTopologySuite.IO.GeoJsonReader();
                    var geom = jsonReader.Read<IGeometry>(shape.ToString(Formatting.None));

                    var fp = new GeometryFeatureProvider(geom);
                    var layer = new VectorLayer("geojson", fp);

                    layer.CoordinateTransformation = new
                        CoordinateTransformationFactory().CreateFromCoordinateSystems(
                            GeographicCoordinateSystem.WGS84,
                            ProjectedCoordinateSystem.WebMercator);

                    layer.Style = new SharpMap.Styles.VectorStyle()
                    {
                        Fill = new SolidBrush(Color.FromArgb(100, 255, 0, 0)),
                        Outline = new Pen(Color.Red, 1.5f),
                        EnableOutline = true
                    };

                    maxX = layer.Envelope.MaxX > maxX ? layer.Envelope.MaxX : maxX;
                    maxY = layer.Envelope.MaxY > maxY ? layer.Envelope.MaxY : maxY;
                    minX = layer.Envelope.MinX < minX ? layer.Envelope.MinX : minX;
                    minY = layer.Envelope.MinY < minY ? layer.Envelope.MinY : minY;

                    map.Layers.Add(layer);
                }

                map.ZoomToBox(new Envelope(new GeoPoint(m

inX, minY), new GeoPoint(maxX, maxY)));
                map.Zoom *= 1.1;

                return map.GetMap();
            }

我正在使用以下 Geojson 文件来渲染形状

{
 "features": [{
   "id": "4",
   "geometry": {
    "coordinates": [[[73.879909, 18.521356], [73.879617, 18.526641], [73.878744, 18.531869], [73.877299, 18.53698], 
    [73.875299, 18.541921], [73.872765, 18.546636], [73.869725, 18.551074], [73.866212, 18.555186], [73.862265, 18.558928], 
    [73.857928, 18.562258], [73.853246, 18.56514], [73.848273, 18.567542], [73.843062, 18.569438], [73.837671, 18.570808], 
    [73.832158, 18.571635], [73.826584, 18.571912], [73.82101, 18.571635], [73.815497, 18.570808], [73.810105, 18.569438], 
    [73.804894, 18.567542], [73.799921, 18.56514], [73.79524, 18.562258], [73.790902, 18.558928], [73.786955, 18.555186], 
    [73.783442, 18.551074], [73.780402, 18.546636], [73.777868, 18.541921], [73.775868, 18.53698], [73.774423, 18.531869], 
    [73.77355, 18.526641], [73.773258, 18.521356], [73.77355, 18.516071], [73.774423, 18.510843], [73.775868, 18.50573], 
    [73.777868, 18.500789], [73.780402, 18.496072], [73.783442, 18.491633], [73.786955, 18.487519], [73.790902, 18.483776], 
    [73.79524, 18.480444], [73.799921, 18.477561], [73.804894, 18.475158], [73.810105, 18.47326], [73.815497, 18.47189], 
    [73.82101, 18.471062], [73.826584, 18.470785], [73.832158, 18.471062], [73.837671, 18.47189], [73.843062, 18.47326], 
    [73.848273, 18.475158], [73.853246, 18.477561], [73.857928, 18.480444], [73.862265, 18.483776], [73.866212, 18.487519], 
    [73.869725, 18.491633], [73.872765, 18.496072], [73.875299, 18.500789], [73.877299, 18.50573], [73.878744, 18.510843], 
    [73.879617, 18.516071], [73.879909, 18.521356]]],
    "type": "Polygon",
    "bbox": [73.773258, 18.470785, 73.879909, 18.571912]
   },
   "properties": {
    "status": "add",
    "editable": "true",
    "color": {
     "r": 0,
     "g": 255,
     "b": 255,
     "a": 0.45
    },
    "border": {
     "b": 255,
     "g": 255,
     "r": 0,
     "a": 1
    },
    "OBJECTID": "4"
   },
   "type": "Feature",
   "bbox": [73.773258, 18.470785, 73.879909, 18.571912]
  }
 ],
 "type": "FeatureCollection"
}

定义 "reverse" 坐标变换对我有帮助:

var ctf = new ProjNet.CoordinateSystems.Transformations.CoordinateTransformationFactory();
layer.CoordinateTransformation = ctf.CreateFromCoordinateSystems(
    ProjNet.CoordinateSystems.GeographicCoordinateSystem.WGS84,
    ProjNet.CoordinateSystems.ProjectedCoordinateSystem.WebMercator);

layer.ReverseCoordinateTransformation = ctf.CreateFromCoordinateSystems(
    ProjNet.CoordinateSystems.ProjectedCoordinateSystem.WebMercator,
    ProjNet.CoordinateSystems.GeographicCoordinateSystem.WGS84);