
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.30] |
![]() |
|
Страницы: (10) « Первая ... 5 6 [7] 8 9 ... Последняя » все ( Перейти к последнему сообщению ) |
Сообщ.
#91
,
|
|
|
Набор карт, их индексация, таблицы dbf их алиас, это все из раннего рабочего приложения. Я переделываю только синтаксис для шестого Builder.
Названия улиц храняться в файле dbf, там же и их ID. Насколько я знаю, рисуется карта, затем геокодированием с ней связываются данные из dbf. Все это уже сделано в MapInfo. Вот уже второй день не могу приступить к проекту и выполнить все рекомендации, потому что из-за предстоящей выставки завалили другой работой. ![]() |
Сообщ.
#92
,
|
|
|
Лена, если не жалко - вышли пачку road-файлов (все 4).
Цитата Лена @ Насколько я знаю, рисуется карта, затем геокодированием с ней связываются данные из dbf. Все это уже сделано в MapInfo. Именно поэтому MapInfo показывет данные объектов, dbf тут ни при чем... |
Сообщ.
#93
,
|
|
|
Как не причем dbf? Вот же поиск из работающего приложения:
l_A.OlePropertyGet("Find").OlePropertySet("FindDataset", ds_A); l_A.OlePropertyGet("Find").OlePropertySet("FindField", ds_A.OlePropertyGet("Fields","ID")); find = l_A.OlePropertyGet("Find").OleFunction("Search", Table2->FieldValues["ID"], "" ); MapX ищет на своей карте значения совподающее со значением из dbf. Значения на карте добавлены геокодированием. Теперь используем dbf для поиска. |
Сообщ.
#94
,
|
|
|
ds_A - это что такое? Как созается? Информацию надо вытягивать клещами.
![]() ![]() Цитата Лена @ Сдается мне, что нет такого понятия "геокодирование". Значения на карте добавлены геокодированием ![]() |
Сообщ.
#95
,
|
|
|
Цитата trainer @ ds_A - это что такое? Как созается? Информацию надо вытягивать клещами. ![]() ![]() Цитата Лена @ Сдается мне, что нет такого понятия "геокодирование". Значения на карте добавлены геокодированием ![]() В первом Buildere и первом MapX не было типов CMapXDataseta, СMapXLayer только варианты в данном случае ds_A это тоже массив вариантов подрузумевающий в данно контексте CMapXDataset. Геокадирование в MapInfo это привязка данных к карте. Т.е. привязка данных к рисунку. Данные храняться в таблицах. Это все уже сделано в первом проекте и все работает. Меня не много загрузили другой работой и я не успеваю проверить еще раз код от trainer. Я сейчас на компьюторе где вообще Builder не установлен. ![]() |
Сообщ.
#96
,
|
|
|
Цитата trainer @ Сдается мне, что нет такого понятия "геокодирование". Это терминология кандидатов в доктора от геоинформатики... ![]() Цитата Лена @ привязка данных к рисунку. Данные храняться в таблицах trainer - графика объектов (метрика) в MAP-файле, данные (семантика) - в DAT-файле, внешних баз с данными объектов (ИМХО) - нет. ЗЫ. Метрика, семантика - из той же терминологии. |
Сообщ.
#97
,
|
|
|
Я сейчас сижу на другом компьюторе, а мой проект на другом компьюторе и на другом этаже. Делаю другую работы, а мысли только о MapX!
![]() Как только пройдет аврал со срочной работой, снова вступлю в бой с MapX! ![]() ![]() |
Сообщ.
#98
,
|
|
|
2:Лена
ситуация с MapX, при работе так ![]() ![]() CMapXFeature *TempMapXFeature=Map1->FeatureFactory->CreateRegion(OleVariant((IDispatch *)pItem),unusedParam); TempMapXFeature->KeyValue=(WideString("mnogougolnik")); CarLayer->AddFeature(OleVariant((IDispatch *)TempMapXFeature),unusedParam); Промсходит утечка памяти, если ты работаешь с MapX через EXEC то утечки не происходт, проверенно экспериментальным путем(скорее всего BC криво импортирует MapX). Из-за этого пришлось весь сервис переписать на Delphi. |
Сообщ.
#99
,
|
|
|
>если ты работаешь с MapX через EXEC то утечки не происходт
Прошу прощения, но я не поняла, что такое EXEC? ![]() |
Сообщ.
#100
,
|
|
|
Это примерно так
![]() ![]() ![]() Variant CarLayer=Map->Layers->CreateLayer(WideString("Cars"),EmptyParam,Variant(1),EmptyParam,EmptyParam); Map->Layers->AnimationLayer=(CMapXLayerPtr)(IDispatch *)CarLayer; //------------------------------------------------------------------------- TFont *CarFont=new TFont(); OleFontToFont(Map->DefaultStyle->SymbolFont,CarFont); CarFont->Size=44; CarFont->Name="MapInfo Transportation"; delete CarFont; Map->DefaultStyle->SymbolCharacter=66; //------------------------------------------------------------------------- Variant NewPoint=OleVariant::CreateObject("MapX.Point.5"); NewPoint.Exec(Procedure("Set")<<37.663579517<<55.64860384); //------------------------------------------------------------------------- Variant NewSymbol=Map->FeatureFactory->CreateSymbol(NewPoint,Variant(Map->DefaultStyle)); NewFeature=CarLayer.Exec(Function("AddFeature")<<NewSymbol); NewFeature.Exec(PropertySet("KeyValue")<<"CAR"); //------------------------------------------------------------------------- NewSymbol=Unassigned; NewPoint=Unassigned; |
Сообщ.
#101
,
|
|
|
Создала новое приложение. В MapX теперь загружен всего один нужный мне слой. Все загружено в режиме конструктора. Однако не находит:
![]() ![]() Table1->First(); CMapXLayer * lyr = Form1->Map1->Layers->_Item(Variant(1)); if(lyr==NULL) { ShowMessage("Слой пуст"); return; } CMapXDataset * ds = Form1->Map1->DataSets->_Item(Variant(1)); ds = Form1->Map1->DataSets->Add(miDataSetLayer,Variant(lyr),Variant(lyr->Name)); if(ds==NULL) { ShowMessage("Проблема с dataset"); return; } Variant Param1; for(int i = 1; i <= ds->Fields->Count; i++) { Param1.operator = (i); ShowMessage(ds->Fields->_Item(Param1)->Name); //Вижу все имена колонок из Table1. ID идет вторым. } int x = Form1->Map1->DataSets->Count; //здесь цифра 1 lyr->Find->FindDataset = Form1->Map1->DataSets->_Item(Variant(1)); if(lyr->Find->FindDataset==NULL)//всегда true { ShowMessage("lyr->Find->FindDataset не найден");//попадаю сюда - плохо return; } lyr->Find->FindField = ds->Fields->_Item(Variant(2));// ID идет вторым. CMapXFindFeature *FoundObj; FoundObj = lyr->Find->Search(WideString(Table1->FieldByName("ID")->AsString)); if (FoundObj->FindRC % 10 == 1) { ShowMessage("Yes"); Form1->Map1->Zoom = 30; Form1->Map1->CenterX = FoundObj->get_CenterX(); Form1->Map1->CenterY = FoundObj->get_CenterY(); } else { ShowMessage("No"); } Можно и так написать: lyr->Find->FindDataset = Form1->Map1->DataSets->_Item(Variant(lyr)); или так: lyr->Find->FindDataset = Form1->Map1->DataSets->_Item(Variant(lyr->Name)); все равно: lyr->Find->FindDataset=NULL если написать так lyr->Find->FindDataset = ds; то исключение. Наверное, надо поиск реализовывать через ф-цию Exec как говорил MAX2002, но как не знаю. ![]() |
Сообщ.
#102
,
|
|
|
Цитата Лена @ Table1->First(); Что в этой таблице, кроме имен файлов, которые ты грузишь в Map1? ... Сколько в ней записей - 48 (по числу слоев) или??? |
Сообщ.
#103
,
|
|
|
Я ведь написала;
Цитата В MapX теперь загружен всего один нужный мне слой. Все загружено в режиме конструктора. Карта с дорогами, к которым привязано ID из Table1, загружена в режиме конструктора в MapX. Все, никакой динамической загрузки. Никаких 48 слоев. В MapX находиться один слой дорог. Эти дороги имеют свои ID. Эти ID можно посмотреть в MapInfo. Соответственно в Table1 находиться улицы - их названия и их ID во второй колонке. Соответственно записей много, потому что улиц много. Карта – таблица – все рабочее, потому что работает в другом приложении без проблем. Похоже что-то с самим компонентом в среде Builder 6. ![]() |
Сообщ.
#104
,
|
|
|
Цитата Лена @ CMapXLayer * lyr = Form1->Map1->Layers->_Item(Variant(1)); if(lyr==NULL) { ShowMessage("Слой пуст"); return; } из деревенской логики следует, что слой отсутствует, а не пуст. Это к слову... Цитата Лена @ for(int i = 1; i <= ds->Fields->Count; i++) { Param1.operator = (i); ShowMessage(ds->Fields->_Item(Param1)->Name); //Вижу все имена колонок из Table1. ID идет вторым. } из твоего фрагмента кода (пост № 101) непонятно, как пристегнута сама таблица Table1? |
Сообщ.
#105
,
|
|
|
>из твоего фрагмента кода (пост № 101) непонятно, как пристегнута сама таблица Table1
К слою TAB геокодированием пристегнуты ID из DBF таблицы с улицами. Это сделано в МapInfo разработчиками карт. Теперь на форме к Table1 пристегнута эта же DBF таблица в режиме конструктора. Теперь используя ID этой таблицы для сопостовления с ID на слое ищем фрагмент катры и увеличиваем его. |