Здравствуйте, первую статью в новом году, я хотел бы посвятить новой теме по разработке ГИС. ГИС - это географические информационные системы, которые в последнее время довольно популярны в сети. Вообще данная статья будет вводная в данную тему и будет посвящена только обзору данных систем, а также установке необходимо программного обеспечения, которые нам понадобится для работы с данной системой. Вообще нам для начала понадобится для Delphi, библиотека ActiveX, с которой мы в основном в дальнейшем и будем работать. Другими словами нам необходим сам компонент, для того, чтобы отобразить, географическую, например, карту в своем проекте. Но сейчас поговорим немного о самом ГИС. Что это такое и для чего он примерно применяется. ГИС предназначен для сбора, хранения, анализа, просмотра графической визуализации пространственных объектов. Другими словами с помощью ГИС мы можем находить на карте любой необходимый объект (дом, улица, магазин). Для начала конечно необходимо все это на карту нанести, все необходимые объекты: дома, улица, озера и так далее, конечно все зависит какая у Вас карта будет намечаться. Для примера масштабных ГИС можно привести — GoogleMaps и YandexMap. Это уже готовые ГИС, где можно найти необходимые нам объекты. А перед нами стоит задача сделать свою собственную ГИС, конечно большую мы не осилим, но какой-нибудь небольшой город обозначить мы сможем. Для этого нам необходимо будет скачать нужный исходник карты в формате, желательно *.shp (ShapeFile), либо сделать исходник карты, без нанесения на нее объектов.

В сети интернет можно полно найти таких исходников, а также сделать из YandexMap, такой исходник, как это сделать я расскажу немного попозже, в следующих статьях. Ну что, кое-как поверхностно объяснил что такое ГИС, давайте теперь установим необходимый нам компонент, а точнее библиотеку ActiveX. Библиотека MapWindowGIS на мой взгляд является довольно мощной библиотекой, которую можно интегрировать почти во все среды разработки программного обеспечения. Скачать можно с официально сайта, по следующей ссылке. После того, как Вы скачаете данную библиотеку необходимо ее установить, после установки, запускаем среду разработки Delphi и следуем следующему.

Выполняем команду Component-Import AciveX Control… после чего появится окно

В списке библиотек ActiveX находим - MapWinGIS Component и нажимаем на кнопку «Install…«, после чего необходимо установить данную библиотеку как обычный компонент. После успешной установки данной библиотеки, компонент TMap появиться на вкладке ActiveX, он будет самый последний в списке, после этого можно установить его на форму и запустить приложение. Как видите при наведении на данный компонент курсора он меняется сразу на курсор в виде «лупы с плюсом», это означает, чтобы при нажатии наша карта будет увеличиваться на определенный процент, который также можно установить в настройках (в свойствах). Ну что после того как наш компонент установлен, нам необходимо загрузить в него какую-нибудь карту, но это уже в следующих статьях.

Вообще сейчас очень развивается индустрия компьютерных игр, а для того, чтобы играть в них — необходимо иметь очень хорошую конфигурацию компьютера, в том числе и процессор. Очень хорошие процессоры компании Intel. Так, что на сайте http://www.Core-2.ru есть очень много полезной информации по данным типам процессоров, в том числе как правильно производить разгон процессора.

Метки: , , , , , , ,




К записи “Работа с MapWindow GIS. Обзор” оставлено комментариев: 53.

  1. Дмитрий:

    А удалось запустить тестовый пример?
    Что то у меня не пошло вылез черный экран?

    Подробнее я писал об этом в
    http://deeptown12.blogspot.com.....tivex.html

    Даже новая версия 4.8.2 не помогла в решении

  2. to Дмитрий
    Я тестовый не запускал, но карты пустые Беларуси я уже грузил и размещал метки и рисовал на них, карты качал с gis-lab

  3. У меня все запустилось, спасибо за материал.

  4. Nezaam:

    Запустилось. Ждем следующую статью.

  5. Дмитрий:

    Странно, а пример програмной загрузки карт не выложите

    а то у меня этот код выдает ошибку:

    var
    Sh : IShapefile;
    begin
    Sh := CoShapefile.Create;
    IF OpenDialog1.Execute then
    begin
    if not Sh.Open(OpenDialog1.FileName, nil) then
    try
    Map1.AddLayer(sh,true); // выдает ошибку после чего, карта
    // становится черным цветом
    Map1.ZoomToMaxExtents;

    Так же в статье не указано что помимо TMap Delphi пытается импортировать другие классы из COM и их нужно прибить вручную, оставив в RegisterComponents только TMap
    except
    On E:Exception do
    ShowMessage(E.Message);
    end;
    end;

  6. Дмитрий:

    Да можно уточнить, какая версия Delphi у вас. Я проверял в 2007 2009 2010 и везде при програмной загрузке shp файла вылезала ошибка. Пришлось на С++ писать.

  7. to Дмитрий я пробывал в Delphi 7, на след неделе загрузку карт статью напишу, в понедельник и сразу выложу

  8. Дмитрий:

    Очень интересно посмотреть, от себя могу дать примеры
    по раскраске объектов на карте
    по поиску объектов на карте в соответвии с информацией в shp файле
    по автоматическому отображению слоя в зависимости от маштаба
    по созданию надписей и динамических надписей зависящих от маштаба

    правда это все было сделано на C++ Builder
    но если у вас в D7 работает, то может пригодится для примера

    так-же есть сборка MapWinGis 4.8.2.0 более новая чем на сайте, на сайте щас официальная c инсталятором 4.7, а новой пока увы нет

  9. Дмитрий:

    У меня вылезала ошибка, которуя я описал выше и в

    http://www.mapwindow.org/phoru.....57,quote=1

    и вот пришел ответ

    «hi,
    I met this issue with Delphi 7 also and the solution is that you need to set the focus on your component Map1 first then you can perform any operations like loading shape files or adding layers ! I remembered that I spent all night long to discover this !!!!!

    Hope it can help !

    Дословно

    Я столкнулся с этой проблемой в Delphi 7 и решением этой проблемы является то, что вам нужно установить фокус на компонент map1 , после чего вы можете совершать любые операции, как загрузка файлов формы или добавления слоев! Я вспомнил, что я провел всю ночь, чтобы обнаружить эту особенность !!!!!

    Надеюсь, что это может помочь!

  10. Дмитрий:

    Коллеги, те кто столнется с ошибкой после загрузки карты, после чего карта станет черной, решение проблемы на всякий случай описал я в
    http://deeptown12.blogspot.com.....tivex.html

  11. Александр:

    Дмитрий
    У тебя Delphi 2009? Я сделал так как было описано выше, дело в том что у меня не появляется закладка ActivX, и вообще нет компонента TMap((, как решить проблему?

  12. Аноним:

    Где найти кноги MapWinGIS

  13. Aleks:

    Где найти книги Map. Зарание спасиба.

  14. Aleks:

    В каких книгах найти преминение проседур Map. Может кто может скинуть на е-meil Aleks.win@e-mail.ua. Зарание спасибо.

  15. Andrey53:

    2Aleks, сейчас по этому литературы очень мало, а если есть, то на Английском языке и не именно применение в Delphi

  16. Aleks:

    Дмитрий:
    var
    Sh : IShapefile;
    Огласи как глобальною переменною в розделе
    Var
    Form1:Tform1;

  17. Дмитрий:

    Здравствуйте! При импорте в Delphi XE выдал ошибку
    [DCC Error] MapWinGIS_TLB.pas(8462): E2004 Identifier redeclared: ‘Result’
    Не сталкивались с подобным?

  18. Дмитрий:

    [DCC Error] MapWinGIS_TLB.pas(8463): E2033 Types of actual and formal var parameters must be identical
    и вот это на следующей строке

  19. Andrey53:

    2Дмитрий
    Я не в курсе к сожалению, в данный момент XE-пакета не стоит у меня, ничего сказать не могу, но попробуйте не Instal-ить сам компонент, а создать модуль Create Unit и подключите его в свой проект, в данной случае Вам придется создавать компонент в run-time

  20. Дмитрий:

    К сожалению не спасло, те же ероры

    [DCC Error] MapWinGIS_TLB.pas(8462): E2004 Identifier redeclared: ‘Result’
    [DCC Error] MapWinGIS_TLB.pas(8463): E2033 Types of actual and formal var parameters must be identical
    [DCC Error] MapWinGIS_TLB.pas(8589): E2004 Identifier redeclared: ‘Result’
    [DCC Error] MapWinGIS_TLB.pas(8590): E2033 Types of actual and formal var parameters must be identical

    • Дмитрий:

      скачал с оф сайта архив delphi_sample_bailey, там был пакет MapWindow.dpk, который установился. Но после того, как кидаю на форму компонент TMap при запуске компилятор выдает те же ошибки. Ну никак не хочет ставиться)

      • Andrey53:

        Я даже и не знаю чем еще помочь, возможно эта версия MapWindowGIS не совместима с XE, придется ждать обновлений самого компонента.

    • Дмитрий Л:

      Дмитрий пробую вот тоже поставить и практически все ошибки устранились через след код

      function TMap.Get_GetObject(LayerHandle: Integer): IDispatch;
      var
      InterfaceVariant: OleVariant;
      begin
      InterfaceVariant := DefaultInterface;
      Result := InterfaceVariant.Get_GetObject(LayerHandle);
      end;

      вместо исходного

      function TMap.Get_GetObject(LayerHandle: Integer): IDispatch;
      begin
      Result := DefaultInterface.Get_GetObject(LayerHandle);
      end;

      тоже и для процедур

      однако осталось четыре ошибки а они и на эти исправления не реагируют

      я уже в разделе деклараций добавил строки:
      _DMap = dispinterface

      function Get_DrawingLabels(DrawingLayerIndex: Integer): ILabels; dispid 187;
      function Get_LayerLabels(LayerHandle: Integer): ILabels; dispid 188;
      function Get_Shapefile(LayerHandle: Integer): IShapefile; dispid 189;
      function Get_Image(LayerHandle: Integer): IImage; dispid 190;

      , компонент установился, тока какие-то ошибки выскакивают при запуске примеров:

      «Method ‘Get_ShapeLayerFillColor’ not supported by automatin object»

      Мож кто чего подскажет…

  21. Piligrim:

    Вылез еще один баг
    TMap кладется на закладку PageControl
    при запуске, если изначально открывается закладка с картой, то не происходит отрисовки части карты. При установке по умолчанию другой закладки, и перехода после запуска на закладку с картой все отрисовывается верно

    • Andrey53:

      а на какое событие грузите карту?

      • Piligrim:

        нажатие кнопки на форме

        • Andrey53:

          а фокус на TMap устанавливаете?

          • Аноним:

            код загрузки карты взят из вашего примера и полностью помещен в обработчик нажатия кнопки. и там и там фокус устанавливается.
            все отличие только в изначальной загрузки формы.
            если при компилляции открыто TabSheet1-неправильно отображается Мар, если TabSheet2 — то правильно. При этом Мар лежит на TabSheet1.

            Возможно это связано с созданием канваса карты — это мое предположение

          • Andrey53:

            я на днях посмотрю, оставьте свой email, чтобы сообщить Вам в случае, если что-то у меня получиться

          • Piligrim:

            Код загрузки карты взят из вашего примера. Фокус и там и там устанавливается.
            Все отличие какой TabSheet открыт при компиляции. Если открыт TabSheet с картой, то неправильно отображается карта.

            Моё предположение, что это связано с созданием канваса карты.

  22. Иван:

    Здравствуйте,
    Меня зовут Иван. Я инженер геодезист и занимаюсь програмированием в среде Embarcadero (Borland) C++ Builder XE. Мне нужно рисовать графику в своей программе и я нашел библиотеку MapWinGIS. Мне удалось импортировать ActiveX контроль в прогрмную среду, но дальше возникают проблемы при компиляции. В этом блоге я вижу, что Вы используете MapWinGIS в среде Delphi, а это должно значит, что можно это делать и в C++ Buildere XE. Или не так? Я буду благодарен если что-нибудь подскажете мне в этом плане. Мне срочно надо с этим разобраться, а никак не получается.

    Короче я создаю пустой проект в C++ Builder XE и вставляю TMap контроль на форму. Первая проблемма в том, что контроль ведет себя неадекватно при попытки менять ему размеры. Но самое неприятное, что когда запускаю программу (без никакого дополнительного програмного кода) на старте появляется ошибка процессора. Могу снять экран и показать картинку если нужно. Я не профессиональный програмист и разобраться в ассемблерском коде не могу. Эта проблема появляется из-за TMap контроля, без него все в порядке.

    Надеюсь на вашу помощь.
    Заранее спосибо.

    • Andrey:

      покажите пожалуйста, какую версию Вы устанавливали? установить версию 4.8.2, данный компонент тестировался мной только на Delphi 7

  23. Алексей:

    Спасибо за очень интересную серию статей.
    Но у меня возникла проблема. Использую Delphi XE2 импортировал ActiveX компонент. После переименования переменных компоненты установились. Но в пустом проекте, при размещении на форме компеонента TMap, ругается что «Класс не зарегестрирован», на другие компоненты установленные с Map WindowsGis не ругается.
    В корне с установленной Map WinGis есть файл regMapWinGIS.cmd, но его выполнение не помогает. Как можно зарегестрировать этот класс и узнать на какой именно класс ругается? Или может у кого есть из примеров пакет компонентов для Delphi 7, может с ним у меня получиться завести этот компонент.

    • Andrey:

      попробуйте зарегистрировать через Пуск-Выполнить библиотеку MapWinGis.ocx

      • Алексей:

        Спасибо за ответ.
        У меня проблема была в 64-х разрядной Map Windows GIS, у меня win 7 64 я сразу 64-х поставил, сейчас переставил Map Windows GIS из 32-х разрядного установщика все заработало. Первый шейп по примеру загрузил. Только иногда вылетает ошибка обращения к памяти, буду дальше разбираться.

  24. pooboop:

    Скажите, пожалуйста, можно ли на TMap кинуть какую=нибудь гифку, которая будет просто отображаться без масштабирования, как флажок?

  25. Алексей:

    Не могу скачать MapWindowGIS по ссылке, видимо всё уже давно поменялось. Пробую скачать с официального сайта MapWinGIS.ocx — это тоже самое?

  26. Регина:

    Добрый день!) А можно загрузить карту и на ней найти точку( по долготе и широте)?

Оставить комментарий

Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*