Как получить высоту в точке (ArcGis Engine 9.3)
-
- Интересующийся
- Сообщения: 19
- Зарегистрирован: 20 окт 2011, 11:25
- Репутация: 0
Как получить высоту в точке (ArcGis Engine 9.3)
Проблема такая: пишу приложение в RAD Studio 2010 на С++. Использую компоненты ArcGIS Engine 9.3. Карту отображать получается, перемещаться по ней получается, координаты точки на карте получаю. НО! Как получить высоту в точке? В карте есть слой с изолиниями. У класса IPoint есть методы get_X(...), get_Y(...) и загадочные get_Z(..) и get_M(...). Кажется, если я всё понял, то get_M(...) как раз должен возвращать высоту. Но get_Z(...) и get_M(...) возвращают значение +NAN. Как быть и что делать??? Очень нужно получать высоту в точке...
- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
Re: Как получить высоту в точке (ArcGis Engine 9.3)
get_Z - высота
get_M - измерение в точке
NAN - not a number
У вас просто нет высот в шейп-файле
get_M - измерение в точке
NAN - not a number
У вас просто нет высот в шейп-файле
-
- Интересующийся
- Сообщения: 19
- Зарегистрирован: 20 окт 2011, 11:25
- Репутация: 0
Re: Как получить высоту в точке (ArcGis Engine 9.3)
В каком именно шэйп-файле? У меня есть шэйповский файл рельефа. В нём для каждого шэйпа (для каждой изолинии) указана абсолютная высота. Почему это не используется? Или, спрошу по-другому, как это можно использовать? Что надо сделать, используя имеющиеся у меня данные, чтобы определять высоту в точке?
- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
Re: Как получить высоту в точке (ArcGis Engine 9.3)
Где именно записана, в атрибутах? Если да, то тип какой у атрибутивного поля?Dmitry_NIC писал(а):У меня есть шэйповский файл рельефа. В нём для каждого шэйпа (для каждой изолинии) указана абсолютная высота.
-
- Интересующийся
- Сообщения: 19
- Зарегистрирован: 20 окт 2011, 11:25
- Репутация: 0
Re: Как получить высоту в точке (ArcGis Engine 9.3)
Да, в атрибутах. В поле CAPTION. Тип поля character.
- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
Re: Как получить высоту в точке (ArcGis Engine 9.3)
Ваш шейп-файл не совсем корректный. Высоты должны быть типа double или на худой конец int. Можно создать пустое поле в каталоге типа double и перенести туда данные калькулятором поля.
Вам высоты в произвольной точке нужны или при клике на изолинию?
Вам высоты в произвольной точке нужны или при клике на изолинию?
-
- Интересующийся
- Сообщения: 19
- Зарегистрирован: 20 окт 2011, 11:25
- Репутация: 0
Re: Как получить высоту в точке (ArcGis Engine 9.3)
Высоты нужны в произвольной точке.
- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
Re: Как получить высоту в точке (ArcGis Engine 9.3)
Здесь либо пересчитывайте сами, либо с использованием ArcScene переводите ваш шейп в grid или tin и работайте с ними.
-
- Интересующийся
- Сообщения: 19
- Зарегистрирован: 20 окт 2011, 11:25
- Репутация: 0
Re: Как получить высоту в точке (ArcGis Engine 9.3)
Вот тут-то собака и зарыта
Как сделать grid или tin и как с ними потом программно работать?

- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
Re: Как получить высоту в точке (ArcGis Engine 9.3)
Вы сделали то что я вас просил с полем типа double? Предположим, что да.
Далее открываете свой шейп с рельефом и идете в свойства. Настраиваете, что бы было все красиво в окне просмотра.
Если полученный результат устраивает - интерполируем ваш шейп в тин. После того, как получите тин и он вас устроит делаете из TIN растр.
После того, как вы это все проделаете вернемся к программированию.
Далее открываете свой шейп с рельефом и идете в свойства. Настраиваете, что бы было все красиво в окне просмотра.
Если полученный результат устраивает - интерполируем ваш шейп в тин. После того, как получите тин и он вас устроит делаете из TIN растр.
После того, как вы это все проделаете вернемся к программированию.
-
- Интересующийся
- Сообщения: 19
- Зарегистрирован: 20 окт 2011, 11:25
- Репутация: 0
Re: Как получить высоту в точке (ArcGis Engine 9.3)
Глупый вопрос, но...
Так...с глупым вопросом уже сам разобрался
))
Так...с глупым вопросом уже сам разобрался

-
- Интересующийся
- Сообщения: 19
- Зарегистрирован: 20 окт 2011, 11:25
- Репутация: 0
Re: Как получить высоту в точке (ArcGis Engine 9.3)
В общем, так - не так, но растр получен: tingrid и там 6 файлов adf. Как с этим дальше работать???...С точки зрения программного получения высоты в точке?
- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
Re: Как получить высоту в точке (ArcGis Engine 9.3)
А дальше вы тупо получаете значение ячейки растра по заданным координатам, в которой и содержится высота.
http://help.arcgis.com/en/sdk/10.0/arco ... 000000.htm
http://help.arcgis.com/en/sdk/10.0/arco ... 000000.htm
-
- Интересующийся
- Сообщения: 19
- Зарегистрирован: 20 окт 2011, 11:25
- Репутация: 0
Re: Как получить высоту в точке (ArcGis Engine 9.3)
Очередной вопрос: в ссылке на пример, что вы дали, там код для C# и VB. Мне надо на С++. На самом деле, это не проблема, проблема в параметре IRaster raster. Это чего? Откуда его взять. Посмотрел по локальному хэлпу под C++ (VS2008), так у класса IRaster нет методов для загрузки растра из файла. И у компоненты MapControl, которую я использую для работы с картой, ничего подобного хоть какому намёку на указатель или идентификатор растра тоже нет.
В принципе, получается, что вся загвоздка у меня сейчас возникает с тем, что откуда взять этот IRaster raster. Попробовал поползать по хэлпу, ссылку на который вы дали, но пока что-то ничего, что помогло бы мне, не нашёл
В принципе, получается, что вся загвоздка у меня сейчас возникает с тем, что откуда взять этот IRaster raster. Попробовал поползать по хэлпу, ссылку на который вы дали, но пока что-то ничего, что помогло бы мне, не нашёл

- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
Re: Как получить высоту в точке (ArcGis Engine 9.3)
Accessing raster datasets - http://help.arcgis.com/en/sdk/10.0/arco ... mqv000000/
Для открытия растра из источника данных: http://help.arcgis.com/en/sdk/10.0/arco ... 21z000000/
А для получения из слоя карты: Приведите слой с растром из интерфейса ILayer к IRasterLayer и по свойству Raster получите IRaster (http://edndoc.esri.com/arcobjects/9.0/C ... rLayer.htm)
Для открытия растра из источника данных: http://help.arcgis.com/en/sdk/10.0/arco ... 21z000000/
А для получения из слоя карты: Приведите слой с растром из интерфейса ILayer к IRasterLayer и по свойству Raster получите IRaster (http://edndoc.esri.com/arcobjects/9.0/C ... rLayer.htm)
Кто сейчас на конференции
Сейчас этот форум просматривают: Semrush [Bot] и 9 гостей