Создание Интерактивной Карты

  • Автор темы Автор темы Boatswain
  • Дата начала Дата начала
B

Boatswain

Доброго времени суток.
Заранее прошу, не судите строго. Десять лет занимаюсь базами про графику уже забыл)).
Итак, имеется Delphi 7. Написана программа работы с базой данных по жилищному фонду.
Заказчик хочет чтобы на экране был реализован не только поиск по адресу, но и по карте.
Т. е. необходимо загружать картинку со схематичной картой района на ней должны быть нарисованы дома (полигоны). При наведении на них курсором мыши, они должны как-то меняться (изменять цвет например), а при клике мыши должны выводиться характеристики дома. Очень желательно чтобы карта могла менять размер и прокручиваться. Все это должно быть реализовано бесплатными средствами.

Попробывал применить Sweet Driving Engine, но хелпа к нему нет, а разбираться времени нет ((
И, собственно говоря, идей нет

Не могли бы Вы мне что-нибудь порекомендовать, желательно с небольшим примером.

Заранее благодарен за ответ.
 
чтобы не париться с графикой... юзайте командную строку в ней прописываете exe=iexplorer.exe cmd=maps.ya.ru открываются яндекс карты... далее нужно программно влепить в edit на странице нужный адрес (аля WinApi) и вот вся простейшая прога, с учетом всех уже затраченных трудов (ну типа людей кто делал яндекс карты и винду)

или прямо в cmd вбить нужный текст (еще проще решение)
 
Так не получится. Надо чтобы без подключения к инету работало.
 
нехилую базу хотите) ну значит что можно забацать... методом большого копи-паста скопировать карту москвы (желательно во всех приближениях) или по крайней мере нужного района\участка... и т.п. сделать компонент timage...
1) загружать в него картинку... через канву двигать как надо, и сделать событие на timage onclick... определить где был курсор - если в прямоугольнике, то значит выбран дом... и двигаться дальше
2) загружать в него картинку, предварительно создав базу данных (набросанную ручками) какое положение какой дом занимает... и при клике определять вхождение в базу данных... если вхождение есть - выбран дом, и двигаемся дальше)

пункты 1 и 2 - взаимоисключающие
1 - более крутой и сложный, ибо даже если выбран дом... то надо отловить текст в данной "схематичной" фигуре, преобразовать его из картинки в текст... и сравнивать с основной бд на вхождение
2 - более простой, но нужно всё сделать ручками... и при подключении нового дома (например) придеться делать изменения в ней самому
 
нехилую базу хотите) ну значит что можно забацать... методом большого копи-паста скопировать карту москвы (желательно во всех приближениях) или по крайней мере нужного района\участка... и т.п. сделать компонент timage...
1) загружать в него картинку... через канву двигать как надо, и сделать событие на timage onclick... определить где был курсор - если в прямоугольнике, то значит выбран дом... и двигаться дальше
2) загружать в него картинку, предварительно создав базу данных (набросанную ручками) какое положение какой дом занимает... и при клике определять вхождение в базу данных... если вхождение есть - выбран дом, и двигаемся дальше)

пункты 1 и 2 - взаимоисключающие
1 - более крутой и сложный, ибо даже если выбран дом... то надо отловить текст в данной "схематичной" фигуре, преобразовать его из картинки в текст... и сравнивать с основной бд на вхождение
2 - более простой, но нужно всё сделать ручками... и при подключении нового дома (например) придеться делать изменения в ней самому


Карта будет делаться для Рязани. Она поменьше) А так, пока в рамках одного района.
Думаю пока про гибридный вариант. Накопипастить карту и внести в базу координаты точек полигона, обозначающего дом. Не придумал пока как реализовать вхождение точки клика в тот или иной полигон если будет масштабирование или сдвиг карты. И как грузить карту в TImage целиком или какой-то кусок...
 
целиком через метод loadfromfile вроде, отражение по частям = рисование на канве...
чтобы абсолютные координаты не терялись при сдвиге... просто тяните некоторый коэффициент "dxdy" который будет учтен при клике, dx=смещение карты по x... dy=смещение карты по y...
x,y- точка где был клик
dx,dy - координаты левой нижней точки отрисованной канвы
тогда координаты отнотосительно всей картинки:
AX=x+dx;
AY=y+dy;

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

т.е. пардон событие не onclick а то что дает координаты, mousedown, mouseup например или вместе их юзать в паре) - так проще
но на onclick никто не мешает почекать курсор... только вроде там координата будет относительно всего экрана (mouse.CursorPos)

И как грузить карту в TImage целиком или какой-то кусок...
Код:
целиком: image1.Picture.LoadFromFile('C:\1.bmp');
 
Код:
целиком: image1.Picture.LoadFromFile('C:\1.bmp');

а если карта огромная будет (эдак 20000 х 15000). нехилые вычислительные ресурсы понадобятся
даже чтобы просто загрузить файл. Второе, если карта будет в растровом формате, то с масштабированием возникнут ОЧЧень большие проблемы. Думаю, клиенту это не понравится.
 
Доброго времени суток.
Заранее прошу, не судите строго. Десять лет занимаюсь базами про графику уже забыл)).
Итак, имеется Delphi 7. Написана программа работы с базой данных по жилищному фонду.
Заказчик хочет чтобы на экране был реализован не только поиск по адресу, но и по карте.
Т. е. необходимо загружать картинку со схематичной картой района на ней должны быть нарисованы дома (полигоны). При наведении на них курсором мыши, они должны как-то меняться (изменять цвет например), а при клике мыши должны выводиться характеристики дома. Очень желательно чтобы карта могла менять размер и прокручиваться. Все это должно быть реализовано бесплатными средствами.

Попробывал применить Sweet Driving Engine, но хелпа к нему нет, а разбираться времени нет ((
И, собственно говоря, идей нет

Не могли бы Вы мне что-нибудь порекомендовать, желательно с небольшим примером.

Заранее благодарен за ответ.


Посмотрите 2gis.ru они какое то время даже исходники выкладывали.

Вобще про изображения думать безмысленно - необходимо создавать свою структуру данных и отрисовывать. Если будете подсовывать bmp комп просто умерет от размера базы.
 
а если карта огромная будет (эдак 20000 х 15000). нехилые вычислительные ресурсы понадобятся
даже чтобы просто загрузить файл. Второе, если карта будет в растровом формате, то с масштабированием возникнут ОЧЧень большие проблемы. Думаю, клиенту это не понравится.

Чтобы не было проблем использовать технологии отрисовки =) и забыть про "по пиксельную обработку"
Масштабирование делается путем загрузки других файлов)
 
2gis не встраивается в программу.
Про попиксельную согласен. Думаю, сделать как в гугле, например. Разбить карту на куски и грузить нужный. Точнее несколько карт разного масштаба разбить на куски....
 
2gis не встраивается в программу.
Про попиксельную согласен. Думаю, сделать как в гугле, например. Разбить карту на куски и грузить нужный. Точнее несколько карт разного масштаба разбить на куски....

+1. быстро и относительно просто)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!