Здравствуйте, первую статью в новом году, я хотел бы посвятить новой теме по разработке ГИС. ГИС - это географические информационные системы, которые в последнее время довольно популярны в сети. Вообще данная статья будет вводная в данную тему и будет посвящена только обзору данных систем, а также установке необходимо программного обеспечения, которые нам понадобится для работы с данной системой. Вообще нам для начала понадобится для 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 есть очень много полезной информации по данным типам процессоров, в том числе как правильно производить разгон процессора. |
Метки: ActiveX, GIS, MapGIS в Delphi, MapWindow GIS, MapWindow GIS в Delphi, MapWinGIS, TMap, ГИС
А удалось запустить тестовый пример?
Что то у меня не пошло вылез черный экран?
Подробнее я писал об этом в
http://deeptown12.blogspot.com.....tivex.html
Даже новая версия 4.8.2 не помогла в решении
to Дмитрий
Я тестовый не запускал, но карты пустые Беларуси я уже грузил и размещал метки и рисовал на них, карты качал с gis-lab
У меня все запустилось, спасибо за материал.
Запустилось. Ждем следующую статью.
Странно, а пример програмной загрузки карт не выложите
а то у меня этот код выдает ошибку:
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;
Да можно уточнить, какая версия Delphi у вас. Я проверял в 2007 2009 2010 и везде при програмной загрузке shp файла вылезала ошибка. Пришлось на С++ писать.
to Дмитрий я пробывал в Delphi 7, на след неделе загрузку карт статью напишу, в понедельник и сразу выложу
Очень интересно посмотреть, от себя могу дать примеры
по раскраске объектов на карте
по поиску объектов на карте в соответвии с информацией в shp файле
по автоматическому отображению слоя в зависимости от маштаба
по созданию надписей и динамических надписей зависящих от маштаба
правда это все было сделано на C++ Builder
но если у вас в D7 работает, то может пригодится для примера
так-же есть сборка MapWinGis 4.8.2.0 более новая чем на сайте, на сайте щас официальная c инсталятором 4.7, а новой пока увы нет
У меня вылезала ошибка, которуя я описал выше и в
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 , после чего вы можете совершать любые операции, как загрузка файлов формы или добавления слоев! Я вспомнил, что я провел всю ночь, чтобы обнаружить эту особенность !!!!!
Надеюсь, что это может помочь!
Коллеги, те кто столнется с ошибкой после загрузки карты, после чего карта станет черной, решение проблемы на всякий случай описал я в
http://deeptown12.blogspot.com.....tivex.html
Дмитрий
У тебя Delphi 2009? Я сделал так как было описано выше, дело в том что у меня не появляется закладка ActivX, и вообще нет компонента TMap((, как решить проблему?
Где найти кноги MapWinGIS
Где найти книги Map. Зарание спасиба.
В каких книгах найти преминение проседур Map. Может кто может скинуть на е-meil . Зарание спасибо.
2Aleks, сейчас по этому литературы очень мало, а если есть, то на Английском языке и не именно применение в Delphi
Дмитрий:
var
Sh : IShapefile;
Огласи как глобальною переменною в розделе
Var
Form1:Tform1;
[...] Работа с MapWindow GIS. Обзор [...]
Здравствуйте! При импорте в Delphi XE выдал ошибку
[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
и вот это на следующей строке
[...] Работа с MapWindow GIS. Обзор [...]
2Дмитрий
Я не в курсе к сожалению, в данный момент XE-пакета не стоит у меня, ничего сказать не могу, но попробуйте не Instal-ить сам компонент, а создать модуль Create Unit и подключите его в свой проект, в данной случае Вам придется создавать компонент в run-time
К сожалению не спасло, те же ероры
[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 при запуске компилятор выдает те же ошибки. Ну никак не хочет ставиться)
Я даже и не знаю чем еще помочь, возможно эта версия 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»
Мож кто чего подскажет…
[...] Работа с MapWindow GIS. Обзор [...]
[...] Работа с MapWindow GIS. Обзор [...]
[...] Работа с MapWindow GIS. Обзор [...]
[...] Работа с MapWindow GIS. Обзор [...]
Вылез еще один баг
TMap кладется на закладку PageControl
при запуске, если изначально открывается закладка с картой, то не происходит отрисовки части карты. При установке по умолчанию другой закладки, и перехода после запуска на закладку с картой все отрисовывается верно
а на какое событие грузите карту?
нажатие кнопки на форме
а фокус на TMap устанавливаете?
код загрузки карты взят из вашего примера и полностью помещен в обработчик нажатия кнопки. и там и там фокус устанавливается.
все отличие только в изначальной загрузки формы.
если при компилляции открыто TabSheet1-неправильно отображается Мар, если TabSheet2 — то правильно. При этом Мар лежит на TabSheet1.
Возможно это связано с созданием канваса карты — это мое предположение
я на днях посмотрю, оставьте свой email, чтобы сообщить Вам в случае, если что-то у меня получиться
Код загрузки карты взят из вашего примера. Фокус и там и там устанавливается.
Все отличие какой TabSheet открыт при компиляции. Если открыт TabSheet с картой, то неправильно отображается карта.
Моё предположение, что это связано с созданием канваса карты.
[...] Работа с MapWindow GIS. Обзор [...]
[...] Работа с MapWindow GIS. Обзор [...]
Здравствуйте,
Меня зовут Иван. Я инженер геодезист и занимаюсь програмированием в среде Embarcadero (Borland) C++ Builder XE. Мне нужно рисовать графику в своей программе и я нашел библиотеку MapWinGIS. Мне удалось импортировать ActiveX контроль в прогрмную среду, но дальше возникают проблемы при компиляции. В этом блоге я вижу, что Вы используете MapWinGIS в среде Delphi, а это должно значит, что можно это делать и в C++ Buildere XE. Или не так? Я буду благодарен если что-нибудь подскажете мне в этом плане. Мне срочно надо с этим разобраться, а никак не получается.
Короче я создаю пустой проект в C++ Builder XE и вставляю TMap контроль на форму. Первая проблемма в том, что контроль ведет себя неадекватно при попытки менять ему размеры. Но самое неприятное, что когда запускаю программу (без никакого дополнительного програмного кода) на старте появляется ошибка процессора. Могу снять экран и показать картинку если нужно. Я не профессиональный програмист и разобраться в ассемблерском коде не могу. Эта проблема появляется из-за TMap контроля, без него все в порядке.
Надеюсь на вашу помощь.
Заранее спосибо.
покажите пожалуйста, какую версию Вы устанавливали? установить версию 4.8.2, данный компонент тестировался мной только на Delphi 7
[...] Работа с MapWindow GIS. Обзор [...]
Спасибо за очень интересную серию статей.
Но у меня возникла проблема. Использую Delphi XE2 импортировал ActiveX компонент. После переименования переменных компоненты установились. Но в пустом проекте, при размещении на форме компеонента TMap, ругается что «Класс не зарегестрирован», на другие компоненты установленные с Map WindowsGis не ругается.
В корне с установленной Map WinGis есть файл regMapWinGIS.cmd, но его выполнение не помогает. Как можно зарегестрировать этот класс и узнать на какой именно класс ругается? Или может у кого есть из примеров пакет компонентов для Delphi 7, может с ним у меня получиться завести этот компонент.
попробуйте зарегистрировать через Пуск-Выполнить библиотеку MapWinGis.ocx
Спасибо за ответ.
У меня проблема была в 64-х разрядной Map Windows GIS, у меня win 7 64 я сразу 64-х поставил, сейчас переставил Map Windows GIS из 32-х разрядного установщика все заработало. Первый шейп по примеру загрузил. Только иногда вылетает ошибка обращения к памяти, буду дальше разбираться.
пробуйте, вроде бы ничего сложно возникнуть не должно
Скажите, пожалуйста, можно ли на TMap кинуть какую=нибудь гифку, которая будет просто отображаться без масштабирования, как флажок?
В такое контексте TMap не работает с GIF-форматом!