а что вам мешает взять последний GDAL, в котором говорят есть конвертер Shape<=>SXF (или самим написать такой конвертер)? Или использовать любой GDAL, который читает Shape, и просто переделать немного свой код (тем более, что модель данных та же самая, и с логической точки зрения Shape и SXF - одно и то же)?Dmitry_NIC писал(а):От Панорамы заставило уйти требование заказчика, что надо использовать шэйп-формат карт![]()
Как получить высоту в точке (ArcGis Engine 9.3)
-
- Гуру
- Сообщения: 4170
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1107
- Ваше звание: программист
- Откуда: Казань
Re: Как получить высоту в точке (ArcGis Engine 9.3)
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 792
- Ваше звание: званий не имею
- Откуда: Москва
Re: Как получить высоту в точке (ArcGis Engine 9.3)
Действительно, можно подумать, что в 2011-м году shape-файлы читаются и пишутся только в аркгисе..
Редактор материалов, модератор форума
- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
Re: Как получить высоту в точке (ArcGis Engine 9.3)
С этого места по подробнее. А требование использовать ArcGIS есть, или можно любую С++ библиотеку по работе с shp/grid?Dmitry_NIC писал(а):От Панорамы заставило уйти требование заказчика, что надо использовать шэйп-формат карт
-
- Интересующийся
- Сообщения: 19
- Зарегистрирован: 20 окт 2011, 11:25
- Репутация: 0
Re: Как получить высоту в точке (ArcGis Engine 9.3)
gamm, вы сами пробовали конвертировать shape в sxf??? Если нет, то хочу сказать, что основная проблема - это указать соответствие между кодами объектов в shape и кодами объектов в классификаторе sxf. Т.е. берёшь один объект, смотришь его код, смотришь, что это за объект, находишь то, что ему соответствует в классификаторе sxf. КБ "Панорама" тоже занимается конвертацией shape в sxf. И берёт, кажется, 100 рублей российских за перевод одного объекта, а их там тысячи. Да, в последних продуктах от Панорамы есть конвертер, но там именно сам ручками указывай все соответствия. Мы конвертнули одну карту из shape в sxf таким образом, но, во-первых, задолбались
, во-вторых, как ни странно, но карта нормально отображается только на том компе, на котором конвертировали, на других компах начинаются глюки. Видимо, что-то сделали не так, нет ещё опыта. Но как есть - так есть. С учётом того, что у заказчика все карты формата shape и пользуются они для работы с ними ArcGis Desktop 10, то смысл нам переводить их карты в sxf? Думаю, многоформатность им не очень-то нужна.
Bishop, ну...на самом деле нет требования именно на ArcGis...как оказалось. Думали, что будет, и шли этим путём. Оказалось, что в явном виде такого требования нет. Проблема лишь в том, что они работают с ArcGis. И все карты у них сохранены в виде докуманта ArcMap (файл *.mxd). Там прописаны все настройки по отображению карты. Другие компоненты, которые мы пробовали использовать (MapWinGis и чего-то там ещё) этот файл не понимают и там приходится самим в ручную настраивать отображение карты. Мой коллега, например, пока так и не смог добиться того, чтобы у него в MapWinGis карта отображалась так же красиво, как у меня, при использовании ArcGis Engine. Вот так, везде свои нюансы. Опять же тот же заказчик скажет наверняка, что документ карты у них *.mxd и наша программа их карты не открывает.
Возможно, вы предложите написать свой код, разбирающий файл mxd и применяющий эти настройки в другой компоненте...ох, но я даже не знаю, стоит ли нам идти этим путём. Может тогда вообще проще самим написать модуль, который на основе изолиний и командных точек строит матрицу высот (подобно матрице высот в sxf). Потому как, если отбросить мелочи, то получение высот - это пока основная проблема. Практически всё остальное вытянуть и реализовать получилось.
Кстати, немного отвлечённый вопрос: очень напрягает медленное отображение карты. Уж очень долго она перерисовывается. Это можно ускорить как-то?

Bishop, ну...на самом деле нет требования именно на ArcGis...как оказалось. Думали, что будет, и шли этим путём. Оказалось, что в явном виде такого требования нет. Проблема лишь в том, что они работают с ArcGis. И все карты у них сохранены в виде докуманта ArcMap (файл *.mxd). Там прописаны все настройки по отображению карты. Другие компоненты, которые мы пробовали использовать (MapWinGis и чего-то там ещё) этот файл не понимают и там приходится самим в ручную настраивать отображение карты. Мой коллега, например, пока так и не смог добиться того, чтобы у него в MapWinGis карта отображалась так же красиво, как у меня, при использовании ArcGis Engine. Вот так, везде свои нюансы. Опять же тот же заказчик скажет наверняка, что документ карты у них *.mxd и наша программа их карты не открывает.
Возможно, вы предложите написать свой код, разбирающий файл mxd и применяющий эти настройки в другой компоненте...ох, но я даже не знаю, стоит ли нам идти этим путём. Может тогда вообще проще самим написать модуль, который на основе изолиний и командных точек строит матрицу высот (подобно матрице высот в sxf). Потому как, если отбросить мелочи, то получение высот - это пока основная проблема. Практически всё остальное вытянуть и реализовать получилось.
Кстати, немного отвлечённый вопрос: очень напрягает медленное отображение карты. Уж очень долго она перерисовывается. Это можно ускорить как-то?
-
- Гуру
- Сообщения: 4170
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1107
- Ваше звание: программист
- Откуда: Казань
Re: Как получить высоту в точке (ArcGis Engine 9.3)
я не только пробовал, я эти конвертеры писал, и они славно работали. Еще в одна тысяча девятьсот затертом году. Люди работали в в MapIinfo, AutoCAD и Пень'О'Раме, и нужно было обмениваться данными. Кстати, проблема классификаторов ни разу не имеет отношения к конвертеру. И если вы используете не саму Панораму, а SDK, то вам и не нужен классификатор (если это не топокарта им.Генштаба СССР), цепляйте нормальную базу и работайте.Dmitry_NIC писал(а):gamm, вы сами пробовали конвертировать shape в sxf???
-
- Интересующийся
- Сообщения: 19
- Зарегистрирован: 20 окт 2011, 11:25
- Репутация: 0
Re: Как получить высоту в точке (ArcGis Engine 9.3)
Bishop, попробовал написать так, как написали вы:
IRaster2 *pRaster2 = (IRaster2 *)pRaster;
Компилятор это хавает. Но в дальнейшем функции ToPixelColumn и ToPixelRow не преобразуют координаты карты в столбцы и строки. Т.е. у меня как были у переменных на входе нулевые значения - так и остаются.
Смущает вот что:

Вы можете так по картинке сказать, теоретически нормально ли прошло создание pRaster2? Меня смущают вопросы в последних строках. Я подозреваю что что-то прошло не так и функции в итоге не работают, потому и нет преобразования координат в столбцы/строки.
IRaster2 *pRaster2 = (IRaster2 *)pRaster;
Компилятор это хавает. Но в дальнейшем функции ToPixelColumn и ToPixelRow не преобразуют координаты карты в столбцы и строки. Т.е. у меня как были у переменных на входе нулевые значения - так и остаются.
Смущает вот что:

Вы можете так по картинке сказать, теоретически нормально ли прошло создание pRaster2? Меня смущают вопросы в последних строках. Я подозреваю что что-то прошло не так и функции в итоге не работают, потому и нет преобразования координат в столбцы/строки.
- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
Re: Как получить высоту в точке (ArcGis Engine 9.3)
Выполните так:
Код ошибки ищем в доках Микрософт или здесь http://help.arcgis.com/en/sdk/10.0/arco ... 000000.htm или где-то рядом при помощи поиска по значению.
Код: Выделить всё
IRaster2* pRaster2(NULL);
HRESULT hr = pRaster->QueryInterface(IID_IRaster2,(void**)&pRaster2);
if(FAILED(hr))
return hr;
Код ошибки ищем в доках Микрософт или здесь http://help.arcgis.com/en/sdk/10.0/arco ... 000000.htm или где-то рядом при помощи поиска по значению.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя