2009-08-11 6 views
1

Я работаю над пользовательским проектом ArcGIS Desktop, и я хотел бы реализовать в нем автоматическую линейную ссылку. Короче говоря, я хотел бы отображать проблемные сегменты вдоль маршрута и показывать степень тяжести, используя цветовой код (например, зеленый, желтый, красный и т. Д.). Я знаю, что это довольно распространенный сценарий и понял, что «правильный путь» для решения этой задачи - создать таблицу линейных событий, которая позволит мне назначать разные коды определенным сегментам маршрута. Некоторые из моих коллег знают, как это сделать вручную, но я не могу найти способ воспроизвести эту программу.Программный способ выполнения линейных ссылок в ArcGIS

Текущий инструмент написан на C# и уже выполняет все необходимые вычисления для определения проблемных областей. Проблема в основном заключается в том, что я не знаю, с чего начать, поскольку я не очень много знаю о ArcObjects. Любой образец кода или предложение приветствуются (предпочтительнее C#, но C++, VB и другие наверняка мне помогут).

EDIT:

Я пытаюсь использовать инструмент MakeRouteEventLayer, но не похоже, чтобы получить различные предварительные условия выполнены. Маршруты размещаются на сервере SDE. До сих пор, я установления соединения таким образом:

ESRI.ArcGIS.esriSystem.IPropertySet pConnectionProperties = new ESRI.ArcGIS.esriSystem.PropertySet(); 
ESRI.ArcGIS.Geodatabase.IWorkspaceFactory pWorkspaceFactory; 
ESRI.ArcGIS.Geodatabase.IWorkspace pWorkspace; 
ESRI.ArcGIS.Location.ILocatorManager pLocatorManager; 
ESRI.ArcGIS.Location.IDatabaseLocatorWorkspace pDatabaseLocatorWorkspace; 

pConnectionProperties.SetProperty("server", "xxxx"); 
pConnectionProperties.SetProperty("instance", "yyyy"); 
pConnectionProperties.SetProperty("database", "zzzz"); 
pConnectionProperties.SetProperty("AUTHENTICATION_MODE", "OSA"); 
pConnectionProperties.SetProperty("version", "dbo.DEFAULT"); 

pWorkspaceFactory = new ESRI.ArcGIS.DataSourcesGDB.SdeWorkspaceFactory(); 
pWorkspace = pWorkspaceFactory.Open(pConnectionProperties, 0); 
pLocatorManager = new ESRI.ArcGIS.Location.LocatorManager(); 
pDatabaseLocatorWorkspace = (ESRI.ArcGIS.Location.IDatabaseLocatorWorkspace)pLocatorManager.GetLocatorWorkspace(pWorkspace); 

Теперь я застрял, пытаясь подготовить все для MakeRouteEventLayer-х constructor. Я не могу найти, как я должен получить Feature Layer для передачи как Входной маршрут Особенности. Кроме того, я не понимаю, как правильно создать таблицу событий. Я не могу найти какой-либо пример, связанный с тем, что я пытаюсь выполнить, кроме this one, который я не понимаю, так как он не документирован/прокомментирован, и типы данных не упоминаются.

ответ

1

Я не совсем уверен, что вы хотите делать. Если вы хотите получить значения линейного реферирования или манипулировать ими непосредственно в классе объектов, у которого уже есть линейная привязка, это довольно прямолинейно.

IFeatureClass fc = ....; Функция IFeature = fc.GetFeature (...); IMSegmentation3 seg = (IMSegmentation3) особенность; ... blah ...

Если вам нужно создать класс объектов с линейными ссылками, вы должны начать с инструментов «Геообработка» в ArcToolbox. Если готовые инструменты могут выполнять большую часть того, что вам нужно, это минимизирует ваше кодирование.

Я бы сильно рекомендую попытаться понять, что вам нужно делать с ArcMap, если это вообще возможно ... затем отбросить ArcObjects.

  1. Linear Referencing API
  2. Linear Referencing Toolbox
  3. Understanding Linear Referencing
+0

Очень информативный ответ, спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^