GetClosestPoint method (ZGeometry)

Возвращает точку геометрического объекта ближайшую к заданной точке

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

ZGeometry

Синтаксис:

Visual Basic:

Function GetClosestPoint(X As Double, Y1 As Double, Geom As VARIANT, flags As Long) As ZPoint

X, Y - координаты заданной точки

Geom - объект типа VARIANT, содержащий геометрию объекта

flags - зарезервирован, должен быть 0

Описание:

Параметр Geom может содержать PolyLine, PolyPolyLine, Contour, PolyContour, ZGeoObject, строку в формате WKT

Пример получения точки объекта, ближайшей к заданной точке:

'VBScript:

Sub ClosestPoint PointID = 117627 ElemID = 117759 Set Out = Zulu.OpenOutputChannel("") Out.Clear Set geom = CreateObject("Zululib.ZGeometry") Set go = CreateObject("Zululib.ZGeoObject") Set L = Zulu.ActiveMapDoc.Layers.Active 'Точка, для которой ищется ближайшая на объекте Set Pt = L.Elements.Item(PointID).GetCenter 'Объкет, у которого ищем точку, ближайшую к данной Set El = L.Elements.Item(ElemID) 'Поиск ближайшей точки с разными способами задания объект 'Объект задан элементом слоя Set Pt1 = geom.GetClosestPoint(Pt.X, Pt.Y, El, 0) Out.PutLine CStr(Pt1.X) + " " + CStr(Pt1.Y) 'Объект задан полилинией Set Pt1 = geom.GetClosestPoint(Pt.X, Pt.Y, El.PolyPolyLine, 0) Out.PutLine CStr(Pt1.X) + " " + CStr(Pt1.Y) 'Полилиния хранится в объекте ZGeoObject go.Init El.PolyPolyLine, nothing Set Pt1 = geom.GetClosestPoint(Pt.X, Pt.Y, go, 0) Out.PutLine CStr(Pt1.X) + " " + CStr(Pt1.Y) 'Елемент слоя хранится в объекте ZGeoObject go.Init El, nothing Set Pt1 = geom.GetClosestPoint(Pt.X, Pt.Y, go, 0) Out.PutLine CStr(Pt1.X) + " " + CStr(Pt1.Y) 'Геометрия задана строкой WKT sQuery = "SELECT Geometry.AsText() WHERE sys=" + CStr(ElemID) Set Result = L.ExecSQL (sQuery) Set ds = Result.DataSet ds.MoveFirst sWKT = ds.FieldValue(0) Set Pt1 = geom.GetClosestPoint(Pt.X, Pt.Y, sWKT, 0) Out.PutLine sWKT Out.PutLine CStr(Pt1.X) + " " + CStr(Pt1.Y) 'WKT записана в объекте ZGeoObject go.Init sWKT, nothing Set Pt1 = geom.GetClosestPoint(Pt.X, Pt.Y, go, 0) Out.PutLine CStr(Pt1.X) + " " + CStr(Pt1.Y) End Sub