Возвращает точку геометрического объекта ближайшую к заданной точке
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