Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
gstof
Зарегистрирован: 26.01.2007 Сообщения: 70 Откуда: Vladivostok-Kurgan
|
Добавлено: Вт 27 Фев 2007 16:25 Заголовок сообщения: |
|
|
Выдает "Не найден идентификатор объекта"
Не понятно почему?
Только что писал на отбор информации из таблицы, никаких претензий к идентификатору не было |
|
Вернуться к началу |
|
|
RuslanG
Зарегистрирован: 10.07.2005 Сообщения: 171 Откуда: ИНТЕГРО
|
|
Вернуться к началу |
|
|
gstof
Зарегистрирован: 26.01.2007 Сообщения: 70 Откуда: Vladivostok-Kurgan
|
Добавлено: Чт 01 Мар 2007 10:09 Заголовок сообщения: |
|
|
Проверил целостность базы, не помогло.
Код Код: | procedure TfExample.btnGetIDClick(Sender: TObject);
var theObjID, TableName, FieldName: WideString; obj:IIngeoMapObject;
dx,dy,d,u,kr,s,x_dop,y_dop,int:Double;
x:Array[0..1000] of double; y:Array[0..1000] of double;
aShape: IIngeoShape;
aPart: IIngeoContourPart;
i,j,k,n:Integer;
// Dat: IIngeoSemData;
aMapObjects: IIngeoMapObjects;
aMapObject: IIngeoMapObject;
aMapObjectId: String;
aTableName: String; //aFieldName: String;
begin
int:=StrToFloat(Edit1.Text);
s:=0;
n:=1;
if FInGEOApp.Selection.Count = 1 then
begin
theObjID := FInGEOApp.Selection.IDs[0];
obj:=FInGeoApp.ActiveDb.MapObjects.GetObject(theObjID);
for i := 0 to obj.Shapes.Count - 1 do
begin
aShape := GetShape(obj, i);
// Если фигура не определяет геометрию пространственного объекта,
// то ее пропускаем
if not aShape.DefineGeometry then
Continue;
for j := 0 to aShape.Contour.Count - 1 do
begin
aPart := GetPart(aShape, j);
for k := 0 to aPart.VertexCount - 1 do
begin
aPart.GetVertex(k,x[k],y[k],kr);
ListBox1.Items.Add(intToStr(k)+' '+FloatToStrf(x[k],ffFixed,12,2)+' '+FloatToStrf(y[k],fffixed,12,2)+FloatTostr(kr));
if k=0 then
begin
x_dop:=x[k];
y_dop:=y[k];
end;
if k<>0 then
begin
dx:=x[k]-x[k-1];
dy:=y[k]-y[k-1];
d:=sqrt(sqr(dx)+sqr(dy));
u:=RadToDeg(ArcSin(dx/d));
if (dx<0) and (dy>0) then u:=180-u;
if (dx<0) and (dy<0) then u:=180+u;
if (dx>0) and (dy<0) then u:=270+u;
ListBox1.Items.Add('line '+FloatToStr(d)+' ugol '+FloatToStr(u)+' s '+FloatToStr(s));
s:=s+d;
if s>int then
begin
x_dop:=x_dop-(int*sin(DegToRad(u)));
y_dop:=y_dop-(int*cos(DegToRad(u)));
s:=sqrt(sqr(x[k]-x_dop)+sqr(y[k]-y_dop));
ListBox1.Items.Add('Dop '+FloatToStrf(x_dop,ffFixed,12,2)+' '+FloatToStrf(y_dop,ffFixed,12,2));
aMapObjectId:=Edit2.Text;
aTableName:= Edit3.Text;
aMapObjects := FInGEOApp.ActiveDb.MapObjects;
aMapObject := aMapObjects.GetObject(aMapObjectId);
aMapObject.SemData.SetValue(aTableName,'X',x_dop,0);
aMapObject.SemData.SetValue(aTableName,'Y',y_dop,0);
aMapObjects.UpdateChanges;
end;
end;
end;
end;
end;
// ShowMessage('Идентификатор выделенного объекта - ' + theObjID);
end
else
ShowMessage('Выберите один объект.');
end; |
---
Исправлено RuslanG (Обрамление кода в теги [Code]) |
|
Вернуться к началу |
|
|
RuslanG
Зарегистрирован: 10.07.2005 Сообщения: 171 Откуда: ИНТЕГРО
|
Добавлено: Чт 01 Мар 2007 11:50 Заголовок сообщения: |
|
|
Процедуру проверил - все работает без ошибок.
Вы берете идентификатор объекта из поля Edit2 Код: | aMapObjectId := Edit2.Text; | Может быть такое, что Вы вводите неправильный или некорректный идентификатор? _________________ С уважением, Руслан Гадеев
Видео уроки ИнГео
Документация ИнГео
Обновления ИнГео
Интегропедия |
|
Вернуться к началу |
|
|
gstof
Зарегистрирован: 26.01.2007 Сообщения: 70 Откуда: Vladivostok-Kurgan
|
Добавлено: Чт 01 Мар 2007 14:16 Заголовок сообщения: |
|
|
Код: | procedure TfExample.Button1Click(Sender: TObject);
var aSemTable: IIngeoSemTable;
aRecords: IIngeoSemDbDataSet;
anObjectId,id2,id3: String;
TableName:WideString;
begin
TableName:=Edit3.Text;
aSemTable := FInGEOApp.ActiveDb.SemTableFromId(Edit2.Text);
aRecords := aSemTable.SemDbTable.SelectData('*', '', null);
while not aRecords.EOF do begin
anObjectId := aRecords.Fields.Item[1].Value;
id2:= aRecords.Fields.Item[2].Value;
id3:= aRecords.Fields.Item[3].Value;
ListBox1.Items.Add(anObjectId+' '+id2+' '+id3);
aRecords.MoveNext;
end;
end; |
Код, который считывает данные из таблицы и записывает в ListBox работает без замечаний.
Так же ID берется из текстового поля
---
Исправлено RuslanG (Обрамление кода в теги [Code]) |
|
Вернуться к началу |
|
|
RuslanG
Зарегистрирован: 10.07.2005 Сообщения: 171 Откуда: ИНТЕГРО
|
Добавлено: Чт 01 Мар 2007 14:32 Заголовок сообщения: |
|
|
Код: | aSemTable := FInGEOApp.ActiveDb.SemTableFromId(Edit2.Text); | Получается, что в Edit2.Text хранится идентификатор семантической таблицы.
В процедуре btnGetIDClick Вы пытаетесь переменной aMapObjectId присвоить идентификатор семантической таблицы, когда надо присваивать идентификатор пространственного объекта.
В процедуре btnGetIDClick измените строку Код: | aMapObjectId:=Edit2.Text; | на
Код: | aMapObjectId:=theObjID; |
P.S.
Пожалуйста, обрамляйте программный код на форуме в теги [code], чтобы удобнее было читать и переносить в Delphi, а также при этом сохраняется табуляция и множественные пробелы. _________________ С уважением, Руслан Гадеев
Видео уроки ИнГео
Документация ИнГео
Обновления ИнГео
Интегропедия |
|
Вернуться к началу |
|
|
gstof
Зарегистрирован: 26.01.2007 Сообщения: 70 Откуда: Vladivostok-Kurgan
|
Добавлено: Чт 01 Мар 2007 17:17 Заголовок сообщения: |
|
|
Хорошо
А как мне получить идентификатор пространственного обьъекта семантической таблитцы. Ведь в моем случае пространственный объект есть линия, а записать данные я хочу в таблицу другого объекта |
|
Вернуться к началу |
|
|
RuslanG
Зарегистрирован: 10.07.2005 Сообщения: 171 Откуда: ИНТЕГРО
|
|
Вернуться к началу |
|
|
gstof
Зарегистрирован: 26.01.2007 Сообщения: 70 Откуда: Vladivostok-Kurgan
|
Добавлено: Пт 02 Мар 2007 08:48 Заголовок сообщения: |
|
|
Вроде решил проблему созданем нужной таблицы в слое объекта, который у меня выделяется вручную.
Но записалась в таблицу только последняя запись.
Попробовал
Код: | aMapObject.SemData.AddRec(aTableName) |
Тоже самое
Еще один вопрос
Я так понимаю можно добавить точки к объекту
Но что такое индекс вершины.
Откуда его брать |
|
Вернуться к началу |
|
|
RuslanG
Зарегистрирован: 10.07.2005 Сообщения: 171 Откуда: ИНТЕГРО
|
Добавлено: Пт 02 Мар 2007 10:20 Заголовок сообщения: |
|
|
Посмотрите, пожалуйста, файл "IngeoIntfs.chm". В нем описана объектная модель ИнГео и содержится полный справочник по программному интерфейсу ИнГео. Цитата: | А как мне получить идентификатор пространственного объекта семантической таблитцы. | У семантической таблицы нет идентификатора пространственного объекта. Чтобы перенести информацию в таблицу другого объекта, необходимо иметь идентификатор объекта или сам объект. И у него, через метод SemData, работать с семантическими данными пространственного объекта. Цитата: | Но что такое индекс вершины. | SetVertex - Устанавливает параметры вершины (команды) контура. Индекс вершины - номер вершины по порядку, начиная с 0. Цитата: | Я так понимаю можно добавить точки к объекту | Интерфейс IIngeoContourPart содержит метод InsertVertex, который добавляет вершину (команду) в часть контура.
Параметры метода:
anIndex - Индекс вершины, перед которой будет вставлена новая вершина. Если значение данного параметра равно "-1", то вершина добавляется в конец части контура.
aX - X координата вершины.
aY - Y координата вершины.
aConvexity - Кривизна ребра, проведенного из предыдущей вершины в добавляемую. Если часть контура замнута, то кривизна первой вершины применяется для замыкающего ребра. Цитата: | Но записалась в таблицу только последняя запись. | Приведите более полный код. _________________ С уважением, Руслан Гадеев
Видео уроки ИнГео
Документация ИнГео
Обновления ИнГео
Интегропедия |
|
Вернуться к началу |
|
|
gstof
Зарегистрирован: 26.01.2007 Сообщения: 70 Откуда: Vladivostok-Kurgan
|
Добавлено: Пт 02 Мар 2007 15:58 Заголовок сообщения: |
|
|
Не могу сообразить, как можно получить идентификатор объекта или сам объект, который нен выделен |
|
Вернуться к началу |
|
|
RuslanG
Зарегистрирован: 10.07.2005 Сообщения: 171 Откуда: ИНТЕГРО
|
|
Вернуться к началу |
|
|
gstof
Зарегистрирован: 26.01.2007 Сообщения: 70 Откуда: Vladivostok-Kurgan
|
Добавлено: Пт 02 Мар 2007 16:53 Заголовок сообщения: |
|
|
Допустим есть ось дороги
Пользователь ее выделяет
Далее нужно описать расчет разбиения точек через заданное расстояние и новые точки добавить в выделенную линию дороги или в отдельный слой, где создана таблица.
Еще от этих точек нужно расчитать точки отвода в обе стороны перпендикулярно направлению оси, допустим по заданным расстояниям в текстовом файле.
Эти точки тоже нанести, для отрисования отвода. |
|
Вернуться к началу |
|
|
gstof
Зарегистрирован: 26.01.2007 Сообщения: 70 Откуда: Vladivostok-Kurgan
|
Добавлено: Пн 05 Мар 2007 20:20 Заголовок сообщения: Примеры |
|
|
Примеры, расположенные по http://integro.ru/dl/ingeo/examples
все компилируются с ошибкой
Код: | [Error] IngeoCreatorPanel_TLB.pas(30): Invalid compiler directive: 'WARN'
[Error] IngeoCreatorPanel_TLB.pas(32): Invalid compiler directive: 'VARPROPSETTER'
[Error] Ingeo_TLB.pas(30): Invalid compiler directive: 'WARN'
[Error] Ingeo_TLB.pas(32): Invalid compiler directive: 'VARPROPSETTER'
[Error] InScripting_TLB.pas(29): Invalid compiler directive: 'WARN'
[Error] InScripting_TLB.pas(31): Invalid compiler directive: 'VARPROPSETTER'
[Fatal Error] InScripting_TLB.pas(34): File not found: 'Variants.dcu' |
|
|
Вернуться к началу |
|
|
RuslanG
Зарегистрирован: 10.07.2005 Сообщения: 171 Откуда: ИНТЕГРО
|
Добавлено: Вт 13 Мар 2007 17:19 Заголовок сообщения: |
|
|
Примеры, приведенные на нашем сервере, предназначены для компиляции в среде Delphi 7. В данный момент ведутся работы по адаптации примеров для Delphi 2006. Адаптированная версия примеров будет доступна с 23 марта 2007г. _________________ С уважением, Руслан Гадеев
Видео уроки ИнГео
Документация ИнГео
Обновления ИнГео
Интегропедия
Последний раз редактировалось: RuslanG (Пн 19 Мар 2007 16:33), всего редактировалось 1 раз |
|
Вернуться к началу |
|
|
andreichernov
Зарегистрирован: 14.02.2005 Сообщения: 209 Откуда: Самара
|
Добавлено: Вт 13 Мар 2007 19:23 Заголовок сообщения: |
|
|
Уважаемый gstof!
С интересом прочитал вашу переписку с работниками отдела технической поддержки фирмы "Интегро".
Просите, что ввязываюсь не в свое дело, ибо я не работаю в Интегро,
но мне кажется, Вам не хватает общих знаний в области геоинформационных систем, баз данных и программирования на языках высокого уровня, а также самостоятельности в изучении нового для Вас материала и внимательности при изучении документации.
Понимая Ваше стремление как можно быстрее решить поставленную задачу, советую пройти курсы программирования в ГИС "Ингео" в ЦСИ "Интегро" или воспользоваться готовыми решениями. По
крайней мере для описываемых Вами задач - построение буферных зон с разными расстояниями до оси линейного объекта или расстановка точек (пикетов) и деление на отрезки в зависимости от расстояния, у нас в Самаре решения есть.
С уважением, Андрей Чернов.
зам директора ОАО "Самара-Информспутник". |
|
Вернуться к началу |
|
|
RuslanG
Зарегистрирован: 10.07.2005 Сообщения: 171 Откуда: ИНТЕГРО
|
|
Вернуться к началу |
|
|
gstof
Зарегистрирован: 26.01.2007 Сообщения: 70 Откуда: Vladivostok-Kurgan
|
Добавлено: Вт 03 Апр 2007 08:40 Заголовок сообщения: |
|
|
При компиляции Addolib.dpk в Delphi2006 возникает ошибка
Код: | [Pascal Fatal Error] AddonLib.dpk(30): E2202 Required package 'InComponents' not found |
|
|
Вернуться к началу |
|
|
RuslanG
Зарегистрирован: 10.07.2005 Сообщения: 171 Откуда: ИНТЕГРО
|
|
Вернуться к началу |
|
|
RuslanG
Зарегистрирован: 10.07.2005 Сообщения: 171 Откуда: ИНТЕГРО
|
Добавлено: Чт 05 Апр 2007 23:31 Заголовок сообщения: |
|
|
gstof писал(а): | Допустим есть ось дороги
Пользователь ее выделяет
Далее нужно описать расчет разбиения точек через заданное расстояние и новые точки добавить в выделенную линию дороги или в отдельный слой, где создана таблица.
Еще от этих точек нужно расчитать точки отвода в обе стороны перпендикулярно направлению оси, допустим по заданным расстояниям в текстовом файле.
Эти точки тоже нанести, для отрисования отвода. |
Возможно, Вам пригодятся исходники модуля "Распределение точечных объектов вдоль линии" [42,5Кб]. Документации к модулю нет. Вопросы будут - стучите в ICQ [214171365]. _________________ С уважением, Руслан Гадеев
Видео уроки ИнГео
Документация ИнГео
Обновления ИнГео
Интегропедия |
|
Вернуться к началу |
|
|
gstof
Зарегистрирован: 26.01.2007 Сообщения: 70 Откуда: Vladivostok-Kurgan
|
Добавлено: Сб 07 Апр 2007 10:38 Заголовок сообщения: |
|
|
В библиотеке AddonLib отсутствует файл TypInf.pas и InSysUtils.pas открывается какими-то шестнадцатиричными символами.
Код: | Возможно, Вам пригодятся исходники модуля "Распределение точечных объектов вдоль линии" [42,5Кб]. Документации к модулю нет. Вопросы будут - стучите в ICQ [214171365]. |
|
|
Вернуться к началу |
|
|
RuslanG
Зарегистрирован: 10.07.2005 Сообщения: 171 Откуда: ИНТЕГРО
|
Добавлено: Вс 08 Апр 2007 04:52 Заголовок сообщения: |
|
|
Файл TypInfo.pas можно найти по следующему пути:
c:\Program Files\Borland\BDS\4.0\source\Win32\rtl\common Цитата: | InSysUtils.pas открывается какими-то шестнадцатиричными символами | Скорее всего Вы открывали файл InSysUtils.dcu _________________ С уважением, Руслан Гадеев
Видео уроки ИнГео
Документация ИнГео
Обновления ИнГео
Интегропедия |
|
Вернуться к началу |
|
|
gstof
Зарегистрирован: 26.01.2007 Сообщения: 70 Откуда: Vladivostok-Kurgan
|
Добавлено: Ср 11 Апр 2007 17:35 Заголовок сообщения: |
|
|
Нет, я открывал файл pas. Но и в этом варианте все работает.
Другая проблема.В модуле MainDialogs в строках 792 и793 объект IIngeoMapObjectsQuery не идентифицирует свойства ObjectID и MoveNext ? |
|
Вернуться к началу |
|
|
RuslanG
Зарегистрирован: 10.07.2005 Сообщения: 171 Откуда: ИНТЕГРО
|
|
Вернуться к началу |
|
|
gstof
Зарегистрирован: 26.01.2007 Сообщения: 70 Откуда: Vladivostok-Kurgan
|
Добавлено: Ср 11 Апр 2007 20:15 Заголовок сообщения: |
|
|
Сделал
Без изменений |
|
Вернуться к началу |
|
|
|