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

Тема в разделе "Delphi - Multimedia, Графика, Игры", создана пользователем Boatswain, 12 мар 2012.

  1. Boatswain

    Boatswain Member

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

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

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

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

    Senset Well-Known Member

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

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

    Boatswain Member

    Регистрация:
    13 ноя 2008
    Сообщения:
    5
    Симпатии:
    0
    Так не получится. Надо чтобы без подключения к инету работало.
     
  4. Senset

    Senset Well-Known Member

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

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

    Boatswain Member

    Регистрация:
    13 ноя 2008
    Сообщения:
    5
    Симпатии:
    0

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

    Senset Well-Known Member

    Регистрация:
    11 сен 2006
    Сообщения:
    136
    Симпатии:
    0
    целиком через метод loadfromfile вроде, отражение по частям = рисование на канве...
    чтобы абсолютные координаты не терялись при сдвиге... просто тяните некоторый коэффициент "dxdy" который будет учтен при клике, dx=смещение карты по x... dy=смещение карты по y...
    x,y- точка где был клик
    dx,dy - координаты левой нижней точки отрисованной канвы
    тогда координаты отнотосительно всей картинки:
    AX=x+dx;
    AY=y+dy;

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

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

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

    DenNik Гость

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

    nayke Well-Known Member

    Регистрация:
    4 авг 2010
    Сообщения:
    310
    Симпатии:
    0

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

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

    Senset Well-Known Member

    Регистрация:
    11 сен 2006
    Сообщения:
    136
    Симпатии:
    0
    Чтобы не было проблем использовать технологии отрисовки =) и забыть про "по пиксельную обработку"
    Масштабирование делается путем загрузки других файлов)
     
  10. Boatswain

    Boatswain Member

    Регистрация:
    13 ноя 2008
    Сообщения:
    5
    Симпатии:
    0
    2gis не встраивается в программу.
    Про попиксельную согласен. Думаю, сделать как в гугле, например. Разбить карту на куски и грузить нужный. Точнее несколько карт разного масштаба разбить на куски....
     
  11. Senset

    Senset Well-Known Member

    Регистрация:
    11 сен 2006
    Сообщения:
    136
    Симпатии:
    0
    +1. быстро и относительно просто)
     
Загрузка...

Поделиться этой страницей