• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

Boatswain

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

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

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

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

Senset

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

или прямо в cmd вбить нужный текст (еще проще решение)
 
B

Boatswain

Так не получится. Надо чтобы без подключения к инету работало.
 
S

Senset

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

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

Boatswain

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

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


Карта будет делаться для Рязани. Она поменьше) А так, пока в рамках одного района.
Думаю пока про гибридный вариант. Накопипастить карту и внести в базу координаты точек полигона, обозначающего дом. Не придумал пока как реализовать вхождение точки клика в тот или иной полигон если будет масштабирование или сдвиг карты. И как грузить карту в TImage целиком или какой-то кусок...
 
S

Senset

целиком через метод 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');
 
D

DenNik

Код:
целиком: image1.Picture.LoadFromFile('C:\1.bmp');

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

nayke

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

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

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

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


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

Вобще про изображения думать безмысленно - необходимо создавать свою структуру данных и отрисовывать. Если будете подсовывать bmp комп просто умерет от размера базы.
 
S

Senset

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

Чтобы не было проблем использовать технологии отрисовки =) и забыть про "по пиксельную обработку"
Масштабирование делается путем загрузки других файлов)
 
B

Boatswain

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

Senset

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

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

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