Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
gstof
Зарегистрирован: 26.01.2007 Сообщения: 70 Откуда: Vladivostok-Kurgan
|
Добавлено: Пт 26 Янв 2007 21:59 Заголовок сообщения: Delphi |
|
|
Работаю в Delphi
Хочу спросить, есть ли компоненты для Делфи для написания прог в Ингео, или какие-нибудь функции
Где их можно взять, а также какая-нибудь документация? |
|
Вернуться к началу |
|
|
gstof
Зарегистрирован: 26.01.2007 Сообщения: 70 Откуда: Vladivostok-Kurgan
|
Добавлено: Вт 30 Янв 2007 13:48 Заголовок сообщения: Создание точечных обектов |
|
|
Создал внешнеее приложение в Делфи
А какими методами допутим добавить точку? |
|
Вернуться к началу |
|
|
RuslanG
Зарегистрирован: 10.07.2005 Сообщения: 171 Откуда: ИНТЕГРО
|
Добавлено: Вт 30 Янв 2007 14:26 Заголовок сообщения: |
|
|
С диаграммой объектов системы ИнГЕО можно ознакомиться в справочном файле «IngeoIntfs.chm», который находится в рабочем каталоге системы (по умолчанию: C:\Program Files\Integro\InGeo).
Если нужны какие-либо примеры реализации - спрашивайте, по мере возможности ответим... _________________ С уважением, Руслан Гадеев
Видео уроки ИнГео
Документация ИнГео
Обновления ИнГео
Интегропедия |
|
Вернуться к началу |
|
|
gstof
Зарегистрирован: 26.01.2007 Сообщения: 70 Откуда: Vladivostok-Kurgan
|
Добавлено: Вт 30 Янв 2007 16:20 Заголовок сообщения: Навигация по таблице |
|
|
Да, я ознакомился.
Как вставить, понял
Допустим, я получил значение из таблицы с нужным именем и из нужного поля.
Не совсем понятно, как переходить от записи к записи до последней
Есть ли такая возможность? |
|
Вернуться к началу |
|
|
RuslanG
Зарегистрирован: 10.07.2005 Сообщения: 171 Откуда: ИНТЕГРО
|
Добавлено: Вт 30 Янв 2007 16:36 Заголовок сообщения: |
|
|
Функция GetRecCount(const aTableName: WideString): Longint - Возвращает количество записей в таблице.
GetDisplayText(const aTableName: WideString; const aFieldName: WideString; aRec: Longint): WideString - Возвращает значение поля таблицы в формате для показа пользователю
В цикле от 0 до GetRecCount(aTableName) - 1 перебираем записи.
Код: | for i := 0 to aSemData.GetRecCount(aTableName) - 1 do begin
s := GetDisplayText(aTableName, aFieldName, i)
end; |
_________________ С уважением, Руслан Гадеев
Видео уроки ИнГео
Документация ИнГео
Обновления ИнГео
Интегропедия |
|
Вернуться к началу |
|
|
gstof
Зарегистрирован: 26.01.2007 Сообщения: 70 Откуда: Vladivostok-Kurgan
|
Добавлено: Ср 31 Янв 2007 09:39 Заголовок сообщения: Функции и свойства |
|
|
А к какому объекту относится ф-ия GetRecCount?
В файле помощи я ее не нашел |
|
Вернуться к началу |
|
|
RuslanG
Зарегистрирован: 10.07.2005 Сообщения: 171 Откуда: ИНТЕГРО
|
Добавлено: Ср 31 Янв 2007 10:40 Заголовок сообщения: |
|
|
Метод GetRecCount реализован в интерфейсе IIngeoSemData.
Пример:
Код: | function GetMapObjectRecCount(aMapObject: IIngeoMapObject; aTableName: String): Integer;
begin
Result := aMapObject.SemData.GetRecCount(aTableName)
end; |
_________________ С уважением, Руслан Гадеев
Видео уроки ИнГео
Документация ИнГео
Обновления ИнГео
Интегропедия |
|
Вернуться к началу |
|
|
gstof
Зарегистрирован: 26.01.2007 Сообщения: 70 Откуда: Vladivostok-Kurgan
|
Добавлено: Вт 06 Фев 2007 11:44 Заголовок сообщения: продолжение |
|
|
Попробую сформулировать мысль.
Как я понимаю, чтобы получить ссылку на объект, необходимо получить его идентификатор. Получать ID выделенного объекта научился. Выделяю точку и получаю. Но как получить ID или всей таблицы или всех точек таблицы без выделения, не понятно.
Т. е получил информацию об одной выделенной точке и все
А как ор всех точках.
Свойство IDs относится к объекту IngeoSelection |
|
Вернуться к началу |
|
|
RuslanG
Зарегистрирован: 10.07.2005 Сообщения: 171 Откуда: ИНТЕГРО
|
Добавлено: Вт 06 Фев 2007 14:45 Заголовок сообщения: |
|
|
Получить список всех объектов заданного слоя:
IIngeoMapObjects.QueryByLayers
Получить список объектов по стилю:
IIngeoMapObjects.QueryByStyle
Получить список объектов по заданному контуру:
IIngeoMapObjects.QueryByContour
Получить список объектов по прямоугольнику:
IIngeoMapObjects.QueryByRect
Получить список объектов, удовлетворяющих условию по семантическим данным:
Допустим есть слой с высотными отметками, содержащий семантическую таблицу "Высотная отметка", в которой есть целочисленное поле "Высота". Задача - найти все объекты с высотой более 500 метров.
Пример, решающий эту задачу выглядит следующим образом:
Код: | var
aSemTable: IIngeoSemTable;
aRecords: IIngeoSemDbDataSet;
anObjectId: String;
begin
aSemTable := ActiveDb.SemTableFromId(...);
aRecords := aSemTable.SemDbTable.SelectData('ID', 'Высота > 500', null);
while not aRecords.EOF do begin
anObjectId := aRecords['ID'];
...
aRecords.MoveNext;
end;
end; |
_________________ С уважением, Руслан Гадеев
Видео уроки ИнГео
Документация ИнГео
Обновления ИнГео
Интегропедия |
|
Вернуться к началу |
|
|
gstof
Зарегистрирован: 26.01.2007 Сообщения: 70 Откуда: Vladivostok-Kurgan
|
Добавлено: Ср 07 Фев 2007 11:29 Заголовок сообщения: |
|
|
в строке
anObjectId := aRecords['ID'];
дает ошибку
Выделяет внутри скобок 'ID' |
|
Вернуться к началу |
|
|
RuslanG
Зарегистрирован: 10.07.2005 Сообщения: 171 Откуда: ИНТЕГРО
|
|
Вернуться к началу |
|
|
gstof
Зарегистрирован: 26.01.2007 Сообщения: 70 Откуда: Vladivostok-Kurgan
|
Добавлено: Ср 07 Фев 2007 17:09 Заголовок сообщения: |
|
|
Не пропускает |
|
Вернуться к началу |
|
|
RuslanG
Зарегистрирован: 10.07.2005 Сообщения: 171 Откуда: ИНТЕГРО
|
Добавлено: Чт 15 Фев 2007 14:49 Заголовок сообщения: |
|
|
Ниже представлен рабочий пример реализации, заполняющий Memo идентификаторами объектов, у которых в таблице (aSemTableID) значение поля "Высота" больше 500:
Код: | procedure Test(aSemTableID: String);
var
aSemTable: IIngeoSemTable;
aRecords: IIngeoSemDbDataSet;
anObjectId: String;
begin
aSemTable := FIngeo.ActiveDb.SemTableFromID(aSemTableID);
aRecords := aSemTable.SemDbTable.SelectData('ID', 'Высота>500', null);
while not aRecords.EOF do begin
anObjectId := aRecords.Fields['ID'].Value;
Memo.Lines.Add(anObjectId);
aRecords.MoveNext;
end;
end; |
_________________ С уважением, Руслан Гадеев
Видео уроки ИнГео
Документация ИнГео
Обновления ИнГео
Интегропедия |
|
Вернуться к началу |
|
|
gstof
Зарегистрирован: 26.01.2007 Сообщения: 70 Откуда: Vladivostok-Kurgan
|
Добавлено: Ср 21 Фев 2007 14:00 Заголовок сообщения: |
|
|
Пытаюсь создать внешнее приложение.
Работаю в Дельфи 2006
Подключаю к проекту файлы М2AddOn и так далее. Потом AUtils и тд.
В файле AUtils не идентифицируются некоторые переменные.
Может быть из-за версии Делфи? |
|
Вернуться к началу |
|
|
RuslanG
Зарегистрирован: 10.07.2005 Сообщения: 171 Откуда: ИНТЕГРО
|
|
Вернуться к началу |
|
|
gstof
Зарегистрирован: 26.01.2007 Сообщения: 70 Откуда: Vladivostok-Kurgan
|
Добавлено: Ср 21 Фев 2007 14:34 Заголовок сообщения: |
|
|
[Pascal Warning] AUtils.pas(404): W1000 Symbol 'AppendStr' is deprecated
[Pascal Warning] AUtils.pas(408): W1000 Symbol 'AppendStr' is deprecated
[Pascal Warning] AUtils.pas(409): W1000 Symbol 'AppendStr' is deprecated
[Pascal Error] AUtils.pas(998): E2003 Undeclared identifier: 'Unassigned'
[Pascal Error] AUtils.pas(1000): E2003 Undeclared identifier: 'Null'
[Pascal Error] AUtils.pas(1028): E2003 Undeclared identifier: 'VarArrayCreate'
[Pascal Error] AUtils.pas(1094): E2003 Undeclared identifier: 'VarType'
[Pascal Error] AUtils.pas(1137): E2003 Undeclared identifier: 'VarIsArray'
[Pascal Error] AUtils.pas(1141): E2003 Undeclared identifier: 'VarArrayDimCount'
[Pascal Error] AUtils.pas(1145): E2003 Undeclared identifier: 'VarArrayLowBound'
[Pascal Error] AUtils.pas(1146): E2003 Undeclared identifier: 'VarArrayHighBound'
[Pascal Warning] AUtils.pas(1209): W1002 Symbol 'Win32Check' is specific to a platform
[Pascal Warning] AUtils.pas(1219): W1002 Symbol 'Win32Check' is specific to a platform
[Pascal Warning] AUtils.pas(1228): W1002 Symbol 'Win32Check' is specific to a platform
[Pascal Fatal Error] AClasses.pas(636): F2063 Could not compile used unit 'AUtils' |
|
Вернуться к началу |
|
|
RuslanG
Зарегистрирован: 10.07.2005 Сообщения: 171 Откуда: ИНТЕГРО
|
|
Вернуться к началу |
|
|
gstof
Зарегистрирован: 26.01.2007 Сообщения: 70 Откуда: Vladivostok-Kurgan
|
Добавлено: Ср 21 Фев 2007 15:05 Заголовок сообщения: |
|
|
Спасибо, в данном случае помогло
Теперь в файле M2AddonnImp не найден файл DLLForm |
|
Вернуться к началу |
|
|
RuslanG
Зарегистрирован: 10.07.2005 Сообщения: 171 Откуда: ИНТЕГРО
|
|
Вернуться к началу |
|
|
gstof
Зарегистрирован: 26.01.2007 Сообщения: 70 Откуда: Vladivostok-Kurgan
|
Добавлено: Пн 26 Фев 2007 10:17 Заголовок сообщения: Возвращаясь к коду |
|
|
Хотел бы вернуться к Вашему примеру выборки Высоты больше 500.
Там вводится aSemTableID -это идентификатор глобальный или локальный?
Что-то прога ответила мне, что не нашла таблицу с таким ID |
|
Вернуться к началу |
|
|
RuslanG
Зарегистрирован: 10.07.2005 Сообщения: 171 Откуда: ИНТЕГРО
|
Добавлено: Пн 26 Фев 2007 10:46 Заголовок сообщения: |
|
|
Цитата: | Там вводится aSemTableID -это идентификатор глобальный или локальный? |
aSemTableID - это локальный идентификатор.
Цитата: | Что-то прога ответила мне, что не нашла таблицу с таким ID |
Скорее всего так оно и есть. Вы уверены, что передаете идентификатор таблицы? _________________ С уважением, Руслан Гадеев
Видео уроки ИнГео
Документация ИнГео
Обновления ИнГео
Интегропедия |
|
Вернуться к началу |
|
|
gstof
Зарегистрирован: 26.01.2007 Сообщения: 70 Откуда: Vladivostok-Kurgan
|
Добавлено: Пн 26 Фев 2007 11:46 Заголовок сообщения: |
|
|
Получилось
Строка anObjectId := aRecords.Fields['ID'].Value;
выглядит у меня anObjectId := aRecords.Fields['ID'].Fields.Item[0].Value;
Еще есть такой вопррос
Как программно добраться до координат точек перегиба полилинии?
IIngeoMapObject имеет координаты левой и правой границы.
А как найти координаты составляющих полилинию? |
|
Вернуться к началу |
|
|
RuslanG
Зарегистрирован: 10.07.2005 Сообщения: 171 Откуда: ИНТЕГРО
|
Добавлено: Пн 26 Фев 2007 14:18 Заголовок сообщения: |
|
|
Пространственный объект карты состоит из набора фигур (Shapes). Каждая фигура в свою очередь имеет контур (Contour) и ссылается на один из стилей (Style), определенный в слое. Контур состоит из частей. Каждая часть контура определяется набором вершин и признаком замкнутости. В зависимости от количества вершин и признака замкнутости часть может относиться к одной из категорий:
А) одна вершина (признак замкнутости не учитывается) - точечная часть контура.
Б) более одной вершины, не замкнута - часть является ломаной линией.
В) более одной вершины, замкнута - часть является площадным многоугольником.
Для программного анализа контурной структуры объекта можно воспользоваться приведенным ниже примером:
Код: | procedure MapObjectInfo;
var
i,j,k: Integer;
aMapObjects: IIngeoMapObjects;
aMapObject: IIngeoMapObject;
aShape: IIngeoShape;
aPart: IIngeoContourPart;
aX, aY, aC: Double;
begin
aMapObjects := FIngeo.ActiveDb.MapObjects;
aMapObject := aMapObjects.GetObject('000100000408');
for i := 0 to aMapObject.Shapes.Count - 1 do begin
aShape := aMapObject.Shapes[i];
// Информация о стиле отрисовки фигуры
Memo.Lines.Add(Format('ShapeStyleName: %s',[aShape.Style.Name]));
// Если фигура не определяет геометрию пространственного объекта,
// то ее пропускаем
if not aShape.DefineGeometry then
Continue;
for j := 0 to aShape.Contour.Count - 1 do begin
aPart := aShape.Contour[j];
// Общая информация о части контура
Memo.Lines.Add(Format(' Part %d',[j]));
if aPart.Closed then
Memo.Lines.Add(' Эта часть контура замкнута.')
else
Memo.Lines.Add(' Эта часть контура разомкнута.');
Memo.Lines.Add(Format(' Площадь: %g мм.', [aPart.Square]));
Memo.Lines.Add(Format(' Периметр: %g мм.', [aPart.Perimeter]));
for k := 0 to aPart.VertexCount - 1 do begin
aPart.GetVertex(k, aX, aY, aC);
// Информация о вершинах
Memo.Lines.Add(Format(' Vertex %d: x = %g, y = %g, convexity = %g', [k, aX, aY, aC]))
end;
end;
end;
end;
|
_________________ С уважением, Руслан Гадеев
Видео уроки ИнГео
Документация ИнГео
Обновления ИнГео
Интегропедия |
|
Вернуться к началу |
|
|
gstof
Зарегистрирован: 26.01.2007 Сообщения: 70 Откуда: Vladivostok-Kurgan
|
Добавлено: Вт 27 Фев 2007 14:28 Заголовок сообщения: |
|
|
Спасибо
Все получилось.
Еще вопрос
Как записать данные в таблицу?
Попробовал метод SetValue.
Не получилось. Может быть потому, что в каждой таблице для каждой записи есть свой ID. А как я узнаю, какой ID присвоить новой записи? |
|
Вернуться к началу |
|
|
RuslanG
Зарегистрирован: 10.07.2005 Сообщения: 171 Откуда: ИНТЕГРО
|
Добавлено: Вт 27 Фев 2007 15:31 Заголовок сообщения: |
|
|
Скорее всего Вы не завершили транзакцию (aMapObjects.UpdateChanges). ID не надо присваивать.
Пример обновления семантических данных пространственного объекта: Код: | procedure UpdateMapObjectTable(aMapObjectId: String;
aTableName: String; aFieldName: String; aValue: Variant);
var
aMapObjects: IIngeoMapObjects;
aMapObject: IIngeoMapObject;
begin
aMapObjects := FIngeo.ActiveDb.MapObjects;
aMapObject := aMapObjects.GetObject(aMapObjectId);
aMapObject.SemData.SetValue(aTableName, aFieldName, aValue, 0);
aMapObjects.UpdateChanges;
end; |
_________________ С уважением, Руслан Гадеев
Видео уроки ИнГео
Документация ИнГео
Обновления ИнГео
Интегропедия |
|
Вернуться к началу |
|
|
|