FormatSaveToStream(SourceFormat: TopobaseFormat, Stream: IIOStream);
FormatSaveToStream(SourceFormat: Prognoz.Platform.Interop.Topobase.TopobaseFormat, Stream: System.IO.Stream);
SourceFormat. Формат топоосновы;
Stream. Поток, в который сохраняется топооснова.
Метод FormatSaveToStream сохраняет топооснову в поток.
Для выполнения примера предполагается наличие в репозитории:
карты с идентификатором MAP, в которой содержится слой с наименованием «Regions»;
формы, которая содержит:
два компонента Button с наименованиями «Button1» и «Button2»;
два компонента UiMap с наименованиями «UiMap1» и «UiMap2», являющиеся источниками данных для «MapBox1» и «MapBox2» соответственно;
два компонента MapBox с наименованиями «MapBox1» и «MapBox2». Выберите для компонентов источники данных «UiMap1» и «UiMap2» в свойстве Source соответственно;
компонент IntegerEdit с наименованием «IntegerEdit1». Задайте для компонента значение формата, в который будет сохранена топооснова, в свойстве Value. В качестве значения формата топоосновы используйте значение перечисления TopobaseFormat.
Для примера на Fore.NET используйте аналоги Fore-компонентов: MapBoxNet, UiMapNet и NumericUpDown.
Добавьте ссылки на системные сборки: Drawing, Map, MathFin, Metabase, Topobase.
Var
Count: Integer;
// Получим информацию о динамических показателях
// в различных временных точках на слое карты
Class VisualDataAdapter: Object, IMapTimeDynamicDataAdapter
Function Get_PartCount(Attribute: Variant; TimePoint: Integer): Integer;
Begin
Return Count;
End Function Get_PartCount;
Function Get_TimePointName(TimePoint: Integer): String;
Begin
Return "TimePoint " + TimePoint.ToString;
End Function Get_TimePointName;
Function Get_TimePointsCount: Integer;
Begin
Return 4;
End Function Get_TimePointsCount;
Function Get_Data(Attribute: Variant; PartvIndex: Integer; TimePoint: Integer): Variant;
Var
t: Integer;
i: Integer;
Begin
t := 1;
For i := 0 To TimePoint Do
t := t + 10;
End For;
Return Math.Rand * 10 * t;
End Function Get_Data;
Function Get_CustomFormat: String;
Begin
Return "#0,000";
End Function Get_CustomFormat;
End Class VisualDataAdapter;
Class ITOPOBASE_FORMATSAVETOSTREAMForm: Form
Button1: Button;
Button2: Button;
MapBox1: MapBox;
MapBox2: MapBox;
UiMap1: UiMap;
UiMap2: UiMap;
IntegerEdit1: IntegerEdit;
mb: IMetabase;
Map: IMap;
Top: IMapTopobase;
Itop: ITopobase;
StreamG: IMemoryStream;
Sub CreateLayer(CurrentMap: IMap);
Var
StartC, EndC: IGxColor;
Color: IMapVisualColorProperty;
Scale: IMapColorScale;
AreaVisual: IMapAreaVisual;
Layer: IMapLayer;
Begin
// Получим слой карты с наименованием «Regions»
Layer := CurrentMap.Layers.FindByName("Regions");
// Зададим цвет фона карты
CurrentMap.Color := New GxColor.CreateARGB(100, 100, 100, 100);
// Обновим карту
CurrentMap.Refresh;
// Получим картографический показатель
AreaVisual := Layer.Visuals.AddAreaVisual;
// Создадим источник данных для показателя
AreaVisual.DataAdapter := New VisualDataAdapter.Create As IMapTimeDynamicDataAdapter;
Count := 5;
// Получим параметры заливки показателя
Color := AreaVisual.Color;
// Определим источник данных для заливки
Color.DataAdapter := AreaVisual.DataAdapter;
// Создадим цветовую шкалу
Scale := New DxMapColorScale.Create As IMapColorScale;
// Зададим начальный цвет градиента
StartC := GxColor.FromName("Red");
// Зададим конечный цвет градиента
EndC := GxColor.FromName("Blue");
// Настроим цветовую шкалу
Scale.AutoSetup(Layer, AreaVisual.DataAdapter, StartC, EndC);
// Зададим цветовую шкалу для заливки показателя
Color.Scale := Scale;
// Обновим карту
CurrentMap.Refresh;
End Sub CreateLayer;
Sub ITOPOBASE_FORMATSAVEFROMSTREAMFormOnCreate(Sender: Object; Args: IEventArgs);
Begin
// Получим репозиторий
mb := MetabaseClass.Active;
// Получим карту
Map := UiMap1.Map;
// Получим топооснову карты
Top := mb.FetchItemById("MAP").Edit As IMapTopobase;
// Сохраним топооснову
Itop := Top As ITopobase;
// Зададим топооснову
Map.Topobase := Itop As IMapTopobase;
// Отобразим карту
CreateLayer(Map);
End Sub ITOPOBASE_FORMATSAVEFROMSTREAMFormOnCreate;
Sub Button1OnClick(Sender: Object; Args: IMouseEventArgs);
Begin
// Создадим поток
StreamG := New MemoryStream.Create;
// Сохраним топооснову в поток
(UiMap1.Map.Topobase As ITopobase).FormatSaveToStream((IntegerEdit1.Value) As TopobaseFormat, StreamG);
End Sub Button1OnClick;
Sub Button2OnClick(Sender: Object; Args: IMouseEventArgs);
Begin
// Зададим в потоке начальную позицию
StreamG.Seek(0, SeekOrigin.Beginning);
// Получим топооснову карты
UiMap2.Map.Topobase := mb.FetchItemById("MAP").Bind As IMapTopobase;
// Загрузим топооснову из потока
(UiMap2.Map.Topobase As ITopobase).FormatLoadFromStream((IntegerEdit1.Value)As TopobaseFormat, StreamG);
// Отобразим карту
CreateLayer(UiMap2.Map);
End Sub Button2OnClick;
End Class ITOPOBASE_FORMATSAVETOSTREAMForm;
Imports Prognoz.Platform.Interop.Drawing;
Imports Prognoz.Platform.Interop.Map;
Imports Prognoz.Platform.Interop.MathFin;
Imports Prognoz.Platform.Interop.Metabase;
Imports Prognoz.Platform.Interop.Topobase;
…
// Получим информацию о динамических показателях
// в различных временных точках на слое карты
Class VisualDataAdapter: IMapTimeDynamicDataAdapter
Public Property PartCount[Attribute: Object; TimePoint: Integer]: Integer
Get
Begin
Return Count;
End Get
End Property;
Public Property Data[Attribute: Object; PartvIndex: Integer; TimePoint: Integer]: Object
Get
Var
Math: MathClass = New MathClass();
t: Integer;
i: Integer;
Begin
t := 1;
For i := 0 To TimePoint Do
t := t + 10;
End For;
Return Math.Rand() * 10 * t;
End Get
End Property;
Public Property TimePointsCount: Integer
Get
Begin
Return 4;
End Get
End Property;
Public Property TimePointName[TimePoint: Integer]: String
Get
Begin
Return "TimePoint " + TimePoint.ToString();
End Get
End Property;
Public Property CustomFormat: String
Get
Begin
Return "#0,000";
End Get
End Property;
End Class;
Var
Count: Integer;
Sub CreateLayer(CurrentMap: IMap);
Var
StartC, EndC: GxColor;
Color: IMapVisualColorProperty;
Scale: DxMapColorScale;
AreaVisual: IMapAreaVisual;
Layer: IMapLayer;
GxColorCls: GxColorClass_2 = New GxColorClass_2();
GxColorCls1: GxColorClassClass = New GxColorClassClass();
Begin
// Получим слой карты с наименованием «Regions»
Layer := CurrentMap.Layers.FindByName["Regions"];
// Зададим цвет фона карты
GxColorCls.CreateARGB(100, 100, 100, 100);
CurrentMap.Color := GxColorCls;
// Обновим карту
CurrentMap.Refresh();
// Получим картографический показатель
AreaVisual := Layer.Visuals.AddAreaVisual();
// Создадим источник данных для показателя
AreaVisual.DataAdapter := New VisualDataAdapter();
Count := 5;
// Получим параметры заливки показателя
Color := AreaVisual.Color;
// Определим источник данных для заливки
Color.DataAdapter := AreaVisual.DataAdapter;
// Создадим цветовую шкалу
Scale := New DxMapColorScaleClass();
// Зададим начальный цвет градиента
StartC := GxColorCls1.FromName("Red");
// Зададим конечный цвет градиента
EndC := GxColorCls1.FromName("Blue");
// Настроим цветовую шкалу
Scale.AutoSetup(Layer, AreaVisual.DataAdapter, StartC, EndC);
// Зададим цветовую шкалу для заливки показателя
Color.Scale := Scale;
// Обновим карту
CurrentMap.Refresh();
End Sub CreateLayer;
Public Partial Class ITOPOBASE_FORMATSAFETOSTREAM_FORMForm: Prognoz.Platform.Forms.Net.ForeNetForm
Public Constructor ITOPOBASE_FORMATSAFETOSTREAM_FORMForm();
Begin
InitializeComponent();
End Constructor;
mb: IMetabase;
Map: IMap;
Top: IMapTopobase;
Itop: ITopobase;
StreamG: System.IO.MemoryStream;
Private Sub ITOPOBASE_FORMATSAFETOSTREAM_FORMForm_Load(sender: System.Object; e: System.EventArgs);
Begin
// Получим репозиторий
mb := Self.Metabase;
// Получим карту
Map := UiMapNet1.Map;
// Получим топооснову карты
Top := mb.ItemById["MAP"].Edit() As IMapTopobase;
// Сохраним топооснову
Itop := Top As ITopobase;
// Зададим топооснову
Map.Topobase := Itop As DxMapTopobase;
// Отобразим карту
CreateLayer(Map);
End Sub;
Private Sub button1_Click(sender: System.Object; e: System.EventArgs);
Begin
// Создадим поток
StreamG := New System.IO.MemoryStream();
// Сохраним топооснову в поток
(UiMapNet1.Map.Topobase As ITopobase).FormatSaveToStream((Convert.ToInt32(numericUpDown1.Value)) As TopobaseFormat, StreamG);
End Sub;
Private Sub button2_Click(sender: System.Object; e: System.EventArgs);
Begin
// Зададим в потоке начальную позицию
StreamG.Seek(0, System.io.SeekOrigin.@Begin);
// Получим топооснову карты
UiMapNet2.Map.Topobase := mb.ItemById["MAP"].Bind() As DxMapTopobase;
// Загрузим топооснову из потока
(UiMapNet2.Map.Topobase As ITopobase).FormatLoadFromStream((Convert.ToInt32(numericUpDown1.Value)) As TopobaseFormat, StreamG);
// Отобразим карту
CreateLayer(UiMapNet2.Map);
End Sub;
End Class;
После выполнения примера:
при нажатии на кнопку «Button1» топооснова будет сохранена в поток в указанном формате;
при нажатии на кнопку «Button2» топооснова будет загружена из потока в форму.
См. также: