| Обсуждение |
| Delphi 6 + ObjectLand - трудности с разработкой [ Alex Darkman ]Среда, 7 ноября 2007, 15:26
Понимаю, что название темы слишком общее. Однако меня угораздило "вляпаться" в разработку проекта, связанного с ObjectLand'ом :) И чувствую, вопросов будет много.
Вопрос на данный момент такой. Использую Borland Delphi 6 и бесплатную версию ObjectLand 2.6.7. Очень нужно через COM-интерфейсы получить координаты точек всех геометрий, которые есть на карте. В справке откопал метод Feature::GetVertex и Feature::GetVertexes. GetVertex, по-хорошему, должен возвращать координаты через переданные параметры x и y. Однако, как я ни бился - возвращаются нули. Переменные x и y - типа Extended. C методом GetVertexes та же ботва - он возвращает массив нулей. Что делать?
P. S. Если нужен фрагмент моей программы, который вызывает эти методы - могу выложить. |
|
| [ Objectland Support ]Четверг, 8 ноября 2007, 14:06
Вот работающий пример написанный на Дельфи 7:
var objEngine: IGDBEngine; objGDB: IGDBGeoDatabase; objMap: IGDBMap; objFeatureset: IGDBFeatureset; objFeature: IGDBFeature; strGDBPath: String; arrVertexes: array of real; outX, outY: OleVariant; begin
// Создание ядра ObjectLand. objEngine := CoGDBEngine.Create;
// Открытие ГБД с атрибутами "Монопольно", "Чтение/Запись", "Без файла изменений". strGDBPath := 'C:\Documents and Settings\All Users\Application Data\ObjectLand\DEMO\City'; objGDB := objEngine.OpenGDB(strGDBPath,gdbOpenExclusive or gdbOpenReadWrite or gdbOpenNoChgFile,'','','');
// Получение карты objMap := objGDB.Maps.Item ('Город Энск');
// Получение набора геометрий на основе слоя 'Земли' objFeatureset := objMap.Layers.Item('Земли').OpenFeatureset(False);
// Получение текущей геометрии из набора objFeature := objFeatureset.Feature;
// Получение одномерного массива координат геометрии arrVertexes := objFeature.GetVertexes(1);
// Получение координат конкретной вершины objFeature.GetVertex(1,1, outX, outY);
// Закрытие набора геометрий. objFeatureset.Close; // Закрытие ГБД. objEngine.Close;
// Освобождение ядра ObjectLand. objEngine := nil;
end;
|
|
| [ Alex Darkman ]Пятница, 9 ноября 2007, 13:52
Спасибо огромное. Проверил код - в Delphi 6 тоже работает. Похоже, что я неправильно пользовался объектной моделью - я объект GDBEngine создавал через процедуру CreateOLEObject, и работал с этим OLE-объектом, а нужно было импортировать библиотеку типов gdbengine.tlb. |
|
| [ ObjectLand Support ]Пятница, 9 ноября 2007, 14:08
Советуем также использовать подготовленные нами демонстрационные примеры по использованию COM-интерфейсов ObjectLand и большое демонстрационное приложение, написанное с использованием COM. См.стр. "O продукте + Для разработчика".
|
|
| [ Зануда ]Пятница, 30 ноября 2007, 19:47
Интересно, почему метод называется GetVertexes, а не GetVertices? |
|
| [ ObjectLand Support ]Суббота, 1 декабря 2007, 18:53
Допустимы обе формы множественного числа слова "vertex". Как и для множественного числа слова "index"(indexes и indices). Мы выбрали более ясную форму для тех, кто не является носителем языка. |
|
ОтветитьЗнаком «*» отмечены обязательные для заполнения поля. |
| |