Как получить высоту в точке (ArcGis Engine 9.3)

ArcGIS 8.x,9.x,10.x (Arcview, ArcEditor, Arcinfo).
Dmitry_NIC
Интересующийся
Сообщения: 19
Зарегистрирован: 20 окт 2011, 11:25
Репутация: 0

Как получить высоту в точке (ArcGis Engine 9.3)

Сообщение Dmitry_NIC » 20 окт 2011, 11:36

Проблема такая: пишу приложение в 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)

Сообщение Дмитрий Барышников » 20 окт 2011, 13:50

get_Z - высота
get_M - измерение в точке
NAN - not a number
У вас просто нет высот в шейп-файле

Dmitry_NIC
Интересующийся
Сообщения: 19
Зарегистрирован: 20 окт 2011, 11:25
Репутация: 0

Re: Как получить высоту в точке (ArcGis Engine 9.3)

Сообщение Dmitry_NIC » 20 окт 2011, 14:15

В каком именно шэйп-файле? У меня есть шэйповский файл рельефа. В нём для каждого шэйпа (для каждой изолинии) указана абсолютная высота. Почему это не используется? Или, спрошу по-другому, как это можно использовать? Что надо сделать, используя имеющиеся у меня данные, чтобы определять высоту в точке?

Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Репутация: 261
Откуда: Москва

Re: Как получить высоту в точке (ArcGis Engine 9.3)

Сообщение Дмитрий Барышников » 20 окт 2011, 14:41

Dmitry_NIC писал(а):У меня есть шэйповский файл рельефа. В нём для каждого шэйпа (для каждой изолинии) указана абсолютная высота.
Где именно записана, в атрибутах? Если да, то тип какой у атрибутивного поля?

Dmitry_NIC
Интересующийся
Сообщения: 19
Зарегистрирован: 20 окт 2011, 11:25
Репутация: 0

Re: Как получить высоту в точке (ArcGis Engine 9.3)

Сообщение Dmitry_NIC » 20 окт 2011, 14:46

Да, в атрибутах. В поле CAPTION. Тип поля character.

Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Репутация: 261
Откуда: Москва

Re: Как получить высоту в точке (ArcGis Engine 9.3)

Сообщение Дмитрий Барышников » 20 окт 2011, 20:38

Ваш шейп-файл не совсем корректный. Высоты должны быть типа double или на худой конец int. Можно создать пустое поле в каталоге типа double и перенести туда данные калькулятором поля.
Вам высоты в произвольной точке нужны или при клике на изолинию?

Dmitry_NIC
Интересующийся
Сообщения: 19
Зарегистрирован: 20 окт 2011, 11:25
Репутация: 0

Re: Как получить высоту в точке (ArcGis Engine 9.3)

Сообщение Dmitry_NIC » 20 окт 2011, 23:23

Высоты нужны в произвольной точке.

Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Репутация: 261
Откуда: Москва

Re: Как получить высоту в точке (ArcGis Engine 9.3)

Сообщение Дмитрий Барышников » 21 окт 2011, 08:06

Здесь либо пересчитывайте сами, либо с использованием ArcScene переводите ваш шейп в grid или tin и работайте с ними.

Dmitry_NIC
Интересующийся
Сообщения: 19
Зарегистрирован: 20 окт 2011, 11:25
Репутация: 0

Re: Как получить высоту в точке (ArcGis Engine 9.3)

Сообщение Dmitry_NIC » 21 окт 2011, 10:38

Вот тут-то собака и зарыта :) Как сделать grid или tin и как с ними потом программно работать?

Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Репутация: 261
Откуда: Москва

Re: Как получить высоту в точке (ArcGis Engine 9.3)

Сообщение Дмитрий Барышников » 21 окт 2011, 11:50

Вы сделали то что я вас просил с полем типа double? Предположим, что да.
Далее открываете свой шейп с рельефом и идете в свойства.
step1.jpg
step1.jpg (31.19 КБ) 12342 просмотра
Настраиваете, что бы было все красиво в окне просмотра.
Если полученный результат устраивает - интерполируем ваш шейп в тин.
step2.jpg
step2.jpg (20.35 КБ) 12342 просмотра
После того, как получите тин и он вас устроит делаете из TIN растр.
После того, как вы это все проделаете вернемся к программированию.

Dmitry_NIC
Интересующийся
Сообщения: 19
Зарегистрирован: 20 окт 2011, 11:25
Репутация: 0

Re: Как получить высоту в точке (ArcGis Engine 9.3)

Сообщение Dmitry_NIC » 22 окт 2011, 15:46

Глупый вопрос, но...

Так...с глупым вопросом уже сам разобрался :)))

Dmitry_NIC
Интересующийся
Сообщения: 19
Зарегистрирован: 20 окт 2011, 11:25
Репутация: 0

Re: Как получить высоту в точке (ArcGis Engine 9.3)

Сообщение Dmitry_NIC » 24 окт 2011, 16:19

В общем, так - не так, но растр получен: tingrid и там 6 файлов adf. Как с этим дальше работать???...С точки зрения программного получения высоты в точке?

Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Репутация: 261
Откуда: Москва

Re: Как получить высоту в точке (ArcGis Engine 9.3)

Сообщение Дмитрий Барышников » 24 окт 2011, 22:42

А дальше вы тупо получаете значение ячейки растра по заданным координатам, в которой и содержится высота.
http://help.arcgis.com/en/sdk/10.0/arco ... 000000.htm

Dmitry_NIC
Интересующийся
Сообщения: 19
Зарегистрирован: 20 окт 2011, 11:25
Репутация: 0

Re: Как получить высоту в точке (ArcGis Engine 9.3)

Сообщение Dmitry_NIC » 25 окт 2011, 09:04

Очередной вопрос: в ссылке на пример, что вы дали, там код для C# и VB. Мне надо на С++. На самом деле, это не проблема, проблема в параметре IRaster raster. Это чего? Откуда его взять. Посмотрел по локальному хэлпу под C++ (VS2008), так у класса IRaster нет методов для загрузки растра из файла. И у компоненты MapControl, которую я использую для работы с картой, ничего подобного хоть какому намёку на указатель или идентификатор растра тоже нет.

В принципе, получается, что вся загвоздка у меня сейчас возникает с тем, что откуда взять этот IRaster raster. Попробовал поползать по хэлпу, ссылку на который вы дали, но пока что-то ничего, что помогло бы мне, не нашёл :(

Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Репутация: 261
Откуда: Москва

Re: Как получить высоту в точке (ArcGis Engine 9.3)

Сообщение Дмитрий Барышников » 25 окт 2011, 12:50

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)

Ответить

Вернуться в «ArcGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей