CutLayersByRegion method (MapDoc)

Записывает в новую карту результат пересечения слоев карты с заданной областью.

Применяется к:

MapDoc

Синтаксис:

Visual Basic:

Function CutLayersByRegion(Region, inCRS As CRS, destMapName As String, destMapUserName As String, DataSrc, flags As Long) As Long

Region - задает область пересечения.

На данный момент область можно задавать как Contour, PolyContour и Layer.Selection

inCRS - проекция в которой задана область.

destMapName - путь или URL карты для записи.

destMapUserName - пользовательское название карты.

DataSrc - имя источника базы данных.

Параметр может содержать либо строку конкретного источника данных, либо принимать одно из предопределенных значений:

$sqlite - база sqlite

$msaccess - база Microsoft Access

$localdb - база Microsoft SQL LocalDB

flags - флаги:

0x01 - наследовать ключи объектов,

0x08 - копировать только геометрию,

0x10 (16) - включать объекты полностью или частично попавшие в область,

0x20 (32) - включать объекты полностью попавшие в область,

0x10 + 0x20 - обрезать объекты по границе области,

0x80 (128) - помещать слои в подпапку с именем карты.

Описание:

При успехе метод возвращает 0. Исходная карта не меняется: результат - новый файл карты по пути destMapName с названием destMapUserName, а слои пишутся рядом с ним под своими прежними именами файлов. С флагом 0x80 слои попадают в подпапку, названную по имени файла карты, а сам файл карты остается снаружи.

Что попадет в вырезку, решают флаги. С флагом 0x10 в карту попадает все, что задето областью, причем объекты на границе переходят целиком, без обрезки; с флагом 0x20 - только объекты, лежащие внутри. Сочетание 0x10 + 0x20 дает тот же результат, что и один флаг 0x20: объекты, пересекающие границу, в вырезку не попадают и не обрезаются.

Без флага 0x01 объекты в новом слое нумеруются заново с единицы, с ним сохраняют прежние ключи. С флагом 0x08 у нового слоя нет баз данных, хотя набор типов объектов остается прежним.

Если область не задевает ни одного объекта, карта все равно создается - с пустыми слоями, - и метод возвращает 0. Вместо системы координат можно передать Nothing - тогда область считается заданной в координатах карты.

В макросах на python метод недоступен: он возвращает -1 и ничего не создает - с любой областью (Contour, PolyContour, Layer.Selection), системой координат и источником данных.

Пример:

Пример вырезает левую половину карты в новую карту с прежними ключами объектов и открывает результат.

Visual Basic:

Sub MapDoc_CutLayersByRegion
'Берем рабочую карту
Set Doc = Zulu.ActiveMapDoc
Set R = Doc.GetBoundsRectangle
'Область - левая половина карты, с запасом по краям
Ym = (R.Ymin + R.Ymax) / 2
Set C = CreateObject("ZuluLib.Contour")
C.AddPoint R.Xmin - 100, R.Ymin - 100
C.AddPoint R.Xmax + 100, R.Ymin - 100
C.AddPoint R.Xmax + 100, Ym
C.AddPoint R.Xmin - 100, Ym
'0x10 - все задетое, 0x01 - прежние ключи, 0x80 - слои в подпапку
r = Doc.CutLayersByRegion(C, Doc.GetCRS, "C:\Data\cut.zmp", "Левая половина", "$sqlite", &H10 + &H1 + &H80)
S = "CutLayersByRegion вернул " & r
'Открываем результат
Set M = CreateObject("ZuluLib.MapDoc")
If M.Open("C:\Data\cut.zmp") Then
  S = S & vbCrLf & "карта """ & M.Name & """, слоев " & M.Layers.Count
  For i = 1 To M.Layers.Count
    S = S & vbCrLf & M.Layers.Item(i).UserName & ": объектов " & M.Layers.Item(i).ElementKeys.Count
  Next
End If
MsgBox S
End Sub