Результат пересечения объектов

0 голосов
спросил 19 Июль, 05 от Geolog1 (1,060 баллов) в категории Программные продукты Esri

Очередной вопрос.

Геометрические объекты имеют функцию Intersect для пересечения друг с другом, она возвращает результат пересечения (если это полилинии, то возвращает точки пересечения).

Вопрос: мне нужно пересечь две полилинии и как результат получить эти же полилинии, но с вставленными в них точками в местах пересечения.

обычно эта функция называется ReturnIntersected или IntersectWith или как-то подобно. А может ее вообще нет?

5 Ответы

0 голосов
ответил 19 Июль, 05 от Tatkis (2,420 баллов)

Попробуйте через добавление точки

InsertPoints Method (esriGeometry)

Inserts copies of the input points as vertices into a Path, Ring, Polyline, or Polygon; or references to the input points into a Multipoint, TriangleFan, or TriangleStrip. This method is intended for internal use only.

Syntax

object.InsertPoints (Index, Count, newPoints )

The InsertPoints method syntax has the following object qualifier and arguments:

Part Description
object An object expression that evaluates to an object in the Applies To list.
Index Required. A Long that represents the Index.
Count Required. A Long that represents the Count.
newPoints Required. An IPoint object.

Product Availability

Available with ArcGIS Engine, ArcGIS Desktop, and ArcGIS Server.

Description

Inserts a specified number (Count) of Points into the PointCollection at the given index from an array of Points.  The first Count points from the array are inserted.

< id=hhpopup =application/x-ole height=0 width=0 id=clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11>< NAME="Width" VALUE="26">< NAME="Height" VALUE="26">< NAME="Command" VALUE="љ"></>

0 голосов
ответил 19 Июль, 05 от Geolog1 (1,060 баллов)

С newPoints - понятно

С Count - понятно

А вот с Index - непонятно. Дело в том, что главное определить между какими индексами вставлять точки.

Алгоритмы решения этой задачи есть, я сам в свое время писал их для VC++. А сейчас был вынужден перейти на C# и чтобы не переписывать все исходники по работе с геометрией решил позаимствовать то, что предлагает ArcObjects. Только вот меня интересует насколько глубоко сдесь все проработанно? Такая операция должна вызываться одной функцией, вся проблема найти ее название.

 

0 голосов
ответил 19 Июль, 05 от Tatkis (2,420 баллов)

Можно попробовать использовать пример, правда на VB, см. в хелпе

SplitAtIntersectionTool Sample

или SplitAtPoint Method  

Удачи!

0 голосов
ответил 20 Июль, 05 от Geolog1 (1,060 баллов)
2 Tatkis: спасибо за подсказку. В VBA, VC++ или C# - значения сильного не имеет, так как все они обращаются к одним и тем же dll. Решение выглядит следующим образом: ESRI.ArcGIS.Geometry.ITopologicalOperator topo; ESRI.ArcGIS.Geometry.PolylineClass ethis; ESRI.ArcGIS.Geometry.PolylineClass eother; ESRI.ArcGIS.Geometry.IPointCollection pts; ESRI.ArcGIS.Geometry.IGeometry geom; ethis = //полилиния, в которую надо вставить точки пересечения eother=//полилиния с которой происходит пересечение

topo=ethis;geom=topo.Intersect(eother,ESRI.ArcGIS.Geometry.e sriGeometryDimension.esriGeometry0Dimension);

pts=(ESRI.ArcGIS.Geometry.IPointCollection)geom;

ethis.SplitAtPoints(pts.EnumVertices,false,false,0.001);// операция вставки точек пересечения

 

 

Единственное что меня сильно не утраивает в ArcObjects - если его использовать напрямую (без создания собственных классов по манипулированию с объектами ArcObjects), то исходник получается уж слишком громоздким.

0 голосов
ответил 20 Июль, 05 от Alexander1 (32,520 баллов)
...Единственное что меня сильно не утраивает в ArcObjects - если его использовать напрямую (без создания собственных классов по манипулированию с объектами ArcObjects), то исходник получается уж слишком громоздким.

Ну дык, это не только с ArcObjects... На то оно и ООП image

Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...