agrobot_base/Exemplos/Aspose.GIS-for-.NET-master/Apps/Geo.Advanced.Viewer/ProjectPresenter.cs

77 lines
2.7 KiB
C#

using System;
using System.IO;
using Aspose.Gis;
using Aspose.Gis.Rendering;
using Aspose.Gis.SpatialReferencing;
using Aspose.Gis.GeoTools.LayersMap;
using Aspose.Gis.Rendering.Labelings;
using Aspose.Gis.Geometries;
using Aspose.Gis.GeoTools.Extensions;
using System.Collections.Generic;
using System.Linq;
using Geo.Advanced.Viewer.Logic;
namespace Geo.Advanced.Viewer
{
/// <summary>
/// Manages operations required to display layers in different forms and styles.
/// </summary>
internal class ProjectPresenter
{
public (VectorLayer placeLayer, MemoryStream mapFileName) CreateMap()
{
var storage = new PhotoStorage();
var photoList = storage.LoadPhotos();
var placeLayer = CreatePlacesLayer(photoList);
var wayLayer = CreateWayLayer(photoList);
var mapStream = CreateMap(placeLayer, wayLayer);
return (placeLayer, mapStream);
}
private static MemoryStream CreateMap(VectorLayer placesLayer, VectorLayer wayLayer, int mapSize = 512)
{
string tilesUrl = "https://tile.openstreetmap.org/{z}/{x}/{y}.png";
var opt = new MapOptions();
opt.SpatialReference = SpatialReferenceSystem.WebMercator;
opt.Renderer = Renderers.Png;
opt.SizeMode = MapSizeModes.Auto;
opt.Width = mapSize;
opt.Height = mapSize;
opt.Layers = new MapLayerOptions[]
{
new MapLayerOptions() { Layer = wayLayer, Symbolyzer = StyleBuilder.CreateWayStyle(), Labeling = Labeling.Null, LayerSpatialRefSys = SpatialReferenceSystem.Wgs84 },
new MapLayerOptions() { Layer = placesLayer, Symbolyzer = StyleBuilder.CreatePlaceStyle(), Labeling = Labeling.Null, LayerSpatialRefSys = SpatialReferenceSystem.Wgs84 }
};
opt.Tiles = new MapTilesOptions() { Url = tilesUrl, Level = 13 };
return LayersMapBuilder.CreateMap(opt);
}
private static VectorLayer CreateWayLayer(List<PhotoModel> photoList)
{
var way = new LineString(photoList.Select(t => t.Coordinate));
var wayHolder = new List<GeoHolder>() { new GeoHolder() { Coordinate = way } };
var wayLayer = Drivers.InMemory.CreateLayer();
wayLayer.AddFeatures(wayHolder);
return wayLayer;
}
private static VectorLayer CreatePlacesLayer(List<PhotoModel> photoList)
{
var placeLayer = Drivers.InMemory.CreateLayer();
placeLayer.AddFeatures(photoList);
return placeLayer;
}
private class GeoHolder
{
public Geometry Coordinate { get; set; }
}
}
}