Программный способ делать линейные ссылки в ArcGIS - PullRequest
1 голос
/ 11 августа 2009

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

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

РЕДАКТИРОВАТЬ:

Я пытаюсь использовать инструмент 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 . Кажется, я не могу понять, как мне заставить функциональный слой проходить как Входной маршрутный объект . Кроме того, я не понимаю, как правильно создать таблицу событий. Кажется, я не могу найти никакого примера, касающегося того, что я пытаюсь выполнить, кроме этого , который я не понимаю, поскольку он не задокументирован / не прокомментирован, а типы данных не упомянуты. *

1 Ответ

1 голос
/ 11 августа 2009

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

IFeatureClass fc = ....; IFeature feature = fc.GetFeature (...); IMSegmentation3 seg = (IMSegmentation3) функция; ... бла ...

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

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

  1. API для линейных ссылок
  2. Набор инструментов для линейных ссылок
  3. Понимание линейных ссылок
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...