На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
Страницы: (10) « Первая ... 5 6 [7] 8 9 ... Последняя » все  ( Перейти к последнему сообщению )  
> Поиск объекта , Вопрос тем, кто работал с MapX5.0
    Набор карт, их индексация, таблицы dbf их алиас, это все из раннего рабочего приложения. Я переделываю только синтаксис для шестого Builder.
    Названия улиц храняться в файле dbf, там же и их ID. Насколько я знаю, рисуется карта, затем геокодированием с ней связываются данные из dbf. Все это уже сделано в MapInfo.

    Вот уже второй день не могу приступить к проекту и выполнить все рекомендации, потому что из-за предстоящей выставки завалили другой работой. :'(
      Лена, если не жалко - вышли пачку road-файлов (все 4).
      Цитата Лена @
      Насколько я знаю, рисуется карта, затем геокодированием с ней связываются данные из dbf. Все это уже сделано в MapInfo.

      Именно поэтому MapInfo показывет данные объектов, dbf тут ни при чем...
        Как не причем 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 для поиска.
          ds_A - это что такое? Как созается? Информацию надо вытягивать клещами. :) Чувствуешь себя святой инквизицией. :D
          Цитата Лена @
          Значения на карте добавлены геокодированием
          Сдается мне, что нет такого понятия "геокодирование". :)
            Цитата trainer @
            ds_A - это что такое? Как созается? Информацию надо вытягивать клещами. :) Чувствуешь себя святой инквизицией. :D
            Цитата Лена @
            Значения на карте добавлены геокодированием
            Сдается мне, что нет такого понятия "геокодирование". :)

            В первом Buildere и первом MapX не было типов CMapXDataseta, СMapXLayer только варианты в данном случае ds_A это тоже массив вариантов подрузумевающий в данно контексте CMapXDataset.
            Геокадирование в MapInfo это привязка данных к карте. Т.е. привязка данных к рисунку. Данные храняться в таблицах. Это все уже сделано в первом проекте и все работает.
            Меня не много загрузили другой работой и я не успеваю проверить еще раз код от trainer. Я сейчас на компьюторе где вообще Builder не установлен. :)
              Цитата trainer @
              Сдается мне, что нет такого понятия "геокодирование".

              Это терминология кандидатов в доктора от геоинформатики... :ph34r:
              Цитата Лена @
              привязка данных к рисунку. Данные храняться в таблицах

              trainer - графика объектов (метрика) в MAP-файле, данные (семантика) - в DAT-файле, внешних баз с данными объектов (ИМХО) - нет.
              ЗЫ. Метрика, семантика - из той же терминологии.
                Я сейчас сижу на другом компьюторе, а мой проект на другом компьюторе и на другом этаже. Делаю другую работы, а мысли только о MapX! :)
                Как только пройдет аврал со срочной работой, снова вступлю в бой с MapX! :) Решение уже совсем рядом. :)
                  2:Лена
                  ситуация с MapX, при работе так
                  ExpandedWrap disabled
                     CMapXFeature *TempMapXFeature=Map1->FeatureFactory->CreateRegion(OleVariant((IDispatch *)pItem),unusedParam);
                       TempMapXFeature->KeyValue=(WideString("mnogougolnik"));
                       CarLayer->AddFeature(OleVariant((IDispatch *)TempMapXFeature),unusedParam);



                  Промсходит утечка памяти, если ты работаешь с MapX через EXEC то утечки не происходт, проверенно экспериментальным путем(скорее всего BC криво импортирует MapX). Из-за этого пришлось весь сервис переписать на Delphi.
                    >если ты работаешь с MapX через EXEC то утечки не происходт

                    Прошу прощения, но я не поняла, что такое EXEC? :wall:
                      Это примерно так :)
                      ExpandedWrap disabled
                             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;
                        Создала новое приложение. В MapX теперь загружен всего один нужный мне слой. Все загружено в режиме конструктора. Однако не находит:
                        ExpandedWrap disabled
                          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, но как не знаю. :(
                          Цитата Лена @
                          Table1->First();

                          Что в этой таблице, кроме имен файлов, которые ты грузишь в Map1?
                          ...
                          Сколько в ней записей - 48 (по числу слоев) или???
                          Сообщение отредактировано: Coala -
                            Я ведь написала;
                            Цитата
                            В MapX теперь загружен всего один нужный мне слой. Все загружено в режиме конструктора.

                            Карта с дорогами, к которым привязано ID из Table1, загружена в режиме конструктора в MapX. Все, никакой динамической загрузки. Никаких 48 слоев. В MapX находиться один слой дорог. Эти дороги имеют свои ID. Эти ID можно посмотреть в MapInfo. Соответственно в Table1 находиться улицы - их названия и их ID во второй колонке. Соответственно записей много, потому что улиц много.
                            Карта – таблица – все рабочее, потому что работает в другом приложении без проблем. Похоже что-то с самим компонентом в среде Builder 6. :(
                              Цитата Лена @

                              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?
                                >из твоего фрагмента кода (пост № 101) непонятно, как пристегнута сама таблица Table1

                                К слою TAB геокодированием пристегнуты ID из DBF таблицы с улицами. Это сделано в МapInfo разработчиками карт. Теперь на форме к Table1 пристегнута эта же DBF таблица в режиме конструктора. Теперь используя ID этой таблицы для сопостовления с ID на слое ищем фрагмент катры и увеличиваем его.
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0409 ]   [ 15 queries used ]   [ Generated: 18.07.25, 04:53 GMT ]