Renderização de Mapa para Imagem SVG, PNG, JPG usando a Biblioteca GIS C#
Visão Geral da Renderização de Mapa
Com a API Aspose.GIS para .NET C# você pode renderizar um mapa de um Shapefile, FileGDB, GeoJSON, KML ou outros formatos de arquivo suportados para SVG, PNG, JPEG ou BMP.
Aqui está o código C# ilustrando como renderizar um mapa de um shapefile para SVG usando as configurações padrão:
// For complete examples and data files, please go to https://github.com/aspose-gis/Aspose.GIS-for-.NET | |
using (var map = new Map(800, 400)) | |
{ | |
map.Add(VectorLayer.Open(dataDir + "land.shp", Drivers.Shapefile)); | |
map.Render(dataDir + "land_out.svg", Renderers.Svg); | |
} |
Aqui está o resultado:
Vamos analisar mais detalhadamente o código.
Primeiro, instanciamos um objeto Map . Ele representa uma coleção de camadas de várias fontes que podem ser renderizadas. Um Mapa tem um tamanho em que deve ser exibido. Aqui definimos o mapa para ter 800 pixels de largura e 400 pixels de altura.
Observe que o Map está envolto na instrução using. Isso é necessário porque o mapa rastreia todos os recursos adicionados a ele e os descarta quando terminamos de renderizar e o objeto Map é descartado.
Em seguida, adicionamos uma camada de um arquivo ao mapa. Cada camada é renderizada sobre a camada anterior, na ordem em que foram adicionadas ao mapa. Veja mais detalhes sobre como abrir camadas vetoriais aqui.
Finalmente, chamamos Map.Render para renderizar o mapa em um arquivo. Especificamos um caminho para onde salvar o arquivo de resultado e um renderer a ser usado. A classe Renderers contém referências a todos os renderizadores incluídos com o Aspose.GIS. Por exemplo, você pode especificar Renderers.Png em vez de Renderers.Svg no exemplo acima para renderizar o mapa em um arquivo PNG
Estilização Avançada
Com a API Aspose.GIS, você pode personalizar a renderização e os estilos de recursos para alcançar o visual desejado.
// For complete examples and data files, please go to https://github.com/aspose-gis/Aspose.GIS-for-.NET | |
using (var map = new Map(800, 476)) | |
{ | |
var baseMapSymbolizer = new SimpleFill { FillColor = Color.Salmon, StrokeWidth = 0.75 }; | |
map.Add(VectorLayer.Open(dataDir + "basemap.shp", Drivers.Shapefile), baseMapSymbolizer); | |
var citiesSymbolizer = new SimpleMarker() { FillColor = Color.LightBlue }; | |
citiesSymbolizer.FeatureBasedConfiguration = (feature, symbolizer) => | |
{ | |
var population = feature.GetValue<int>("population"); | |
symbolizer.Size = 10 * population / 1000; | |
if (population < 2500) | |
{ | |
symbolizer.FillColor = Color.GreenYellow; | |
} | |
}; | |
map.Add(VectorLayer.Open(dataDir + "points.geojson", Drivers.GeoJson), citiesSymbolizer); | |
map.Render(dataDir + "cities_out.svg", Renderers.Svg); | |
} |
Desenhe raster no mapa
Com o Aspose.GIS para .NET você pode renderizar um mapa de formatos raster.
Renderize com as configurações padrão
Aqui está como renderizar um mapa de um GeoTIFF para SVG usando as configurações padrão:
// For complete examples and data files, please go to https://github.com/aspose-gis/Aspose.GIS-for-.NET | |
string filesPath = RunExamples.GetDataDir(); | |
using (var map = new Map(500, 500)) | |
{ | |
var layer = Drivers.GeoTiff.OpenLayer(Path.Combine(filesPath, "raster_float32.tif")); | |
// Conversion to colors is detected automatically. | |
// The maximum and minimum values are calculated and linear interpolation is used. | |
map.Add(layer); | |
map.Render(filesPath + "raster_float32_out.svg", Renderers.Svg); | |
} |
Renderize rasters inclinados
Com o Aspose.GIS você pode renderizar um raster com células de raster inclinadas.
// For complete examples and data files, please go to https://github.com/aspose-gis/Aspose.GIS-for-.NET | |
string filesPath = RunExamples.GetDataDir(); | |
using (var map = new Map(500, 500)) | |
{ | |
// use background color | |
map.BackgroundColor = Color.Azure; | |
var layer = Drivers.GeoTiff.OpenLayer(Path.Combine(filesPath, "raster_skew.tif")); | |
// Conversion to colors is detected automatically. | |
// The maximum and minimum values are calculated and linear interpolation is used. | |
map.Add(layer); | |
map.Render(filesPath + "raster_skew_out.svg", Renderers.Svg); | |
} |
Renderize em referência espacial polar
O Aspose.GIS permite usar referências espaciais polares em um processo de renderização de mapa.
// For complete examples and data files, please go to https://github.com/aspose-gis/Aspose.GIS-for-.NET | |
string filesPath = RunExamples.GetDataDir(); | |
// make own multi colorizer it works faster than auto-detection | |
var colorizer = new MultiBandColor() | |
{ | |
RedBand = new BandColor() { BandIndex = 0, Min = 0, Max = 255 }, | |
GreenBand = new BandColor() { BandIndex = 1, Min = 0, Max = 255 }, | |
BlueBand = new BandColor() { BandIndex = 2, Min = 0, Max = 255 } | |
}; | |
using (var map = new Map(500, 500)) | |
{ | |
// setup the polar extent and coordinate system (gnomonic spatial reference) | |
map.SpatialReferenceSystem = SpatialReferenceSystem.CreateFromEpsg(102034); | |
map.Extent = new Extent(-180, 60, 180, 90) { SpatialReferenceSystem = SpatialReferenceSystem.Wgs84 }; | |
map.BackgroundColor = Color.Azure; | |
// open geo-tiff | |
var layer = Drivers.GeoTiff.OpenLayer(Path.Combine(filesPath, "raster_countries.tif")); | |
// draw | |
map.Add(layer, colorizer); | |
map.Render(filesPath + "raster_countries_gnomonic_out.png", Renderers.Png); | |
} |