Запись фрагмента карты в виде растрового изображения в поток IStream (bmp, jpg, gif, png).
Visual Basic:
Function DrawToStream(Width As Long, Height As Long, Xc As Double, Yc As Double, Scale As Double, RasterType As Long, Stream As Unknown) As Boolean
Width - ширина изображения в пикселах.
Height - высота изображения в пикселах.
Xc, Yc - центр изображения в координатах местности.
Scale - масштаб отображения.
RasterType - параметр, определяющий формат растрового файла:
0 - BMP,
1 - JPG,
2 - GIF,
4 - PNG,
Stream - COM-интерфейс IStream для записи изображения.
Масштаб задается в единицах карты на точку изображения - так же, как у свойства MapScale вида карты: чем больше число, тем мельче рисунок. Чтобы участок карты шириной W единиц занял на изображении N точек, масштаб берут равным W / N.
Точка (Xc, Yc) попадает в середину изображения.
В макросе на VBScript потоком служит ADODB.Stream, открытый в двоичном режиме; изображение из него сохраняют в файл методом SaveToFile. Метод рисует и у карты, созданной отдельно от окон ZuluGIS.
В макросах на python метод недоступен: объект-поток создать нечем - ни win32com, ни comtypes в поставке нет.
Пример рисует всю карту в поток так, чтобы она заняла 500 точек по ширине, и сохраняет изображение в файл.
Visual Basic:
Sub MapDoc_DrawToStream 'Берем рабочую карту Set Doc = Zulu.ActiveMapDoc Set R = Doc.GetBoundsRectangle 'Центр карты и масштаб: ширина карты по Y ложится в 500 точек Xc = (R.Xmin + R.Xmax) / 2 Yc = (R.Ymin + R.Ymax) / 2 Sc = (R.Ymax - R.Ymin) / 500 'Двоичный поток для изображения Set st = CreateObject("ADODB.Stream") st.Type = 1 st.Open If Doc.DrawToStream(600, 600, Xc, Yc, Sc, 4, st) Then S = "Масштаб " & Round(Sc, 2) & ", в потоке байт: " & st.Size st.SaveToFile "C:\Data\map.png", 2 Else S = "Не удалось получить изображение" End If st.Close MsgBox S End Sub