Страница 1 из 1

Простейшая карта для сайта

Добавлено: 27 окт 2010, 10:30
M@ster :-)
Здравствуйте, уважаемые форумчане. У меня следующая проблема: Заказчик хочет на сайт выложить карту города с возможностью переходить от общего вида города к выбранному району.
Требования:
1. На карту должны быть нанесены наши "водяные знаки": название сайта и логотип компании
2. Сделать так, чтобы карту нельзя было скачать.
Доп. требования:
3. Возможность добавлять свои пометки на карте зарегистрированным пользователям.
Имеется: 300мб карт и сайт на Друпале.
Вопросы:
1. Существует ли готовое бесплатное решение, реализующее хотя бы базовые требования на уровне: "загрузил карты и живешь спокойно"
2. Если волшебной таблетки из в.1. не существует, то какое решение наиболее простое?

Re: Простейшая карта для сайта

Добавлено: 27 окт 2010, 10:57
nadiopt
во-первых, в чем и как сделана исходная карта?
если например в ArcGis - можно экспортнуть в svg и запихать как картинку. Знак и лого - пхнуть на карту прямо в Арке
в кугисе есть такой плагин ImageMap, делает растр+хтмл
но вот как спасти от скачивания - мне неведомо:(

Re: Простейшая карта для сайта

Добавлено: 27 окт 2010, 11:31
M@ster :-)
nadiopt писал(а):во-первых, в чем и как сделана исходная карта?
если например в ArcGis - можно экспортнуть в svg и запихать как картинку. Знак и лого - пхнуть на карту прямо в Арке
в кугисе есть такой плагин ImageMap, делает растр+хтмл
но вот как спасти от скачивания - мне неведомо:(
Карты в растре (jpg). Простая картинка не пойдет, скачивается за 2 клика да и по 30-40 мб на район - не есть айс.

Из решений пробовал ставить MapServer хотя бы на уровне примеров, однако защиты от сохранения там не нашел, да и сложный он, без пол-литра не разберешься.
Сейчас вижу пока 3 решения:
1. Ковырять MapServer или аналог (много доп.плюшек, но трудно, долго и необходимо знать мат.часть)
2. Попробовать запихать карту во Флеш (Точно не скачают, но трудно, долго и необходимо знать мат.часть)
3. Защитить картинку от скачивания(защита на уровне 90% не смогут скачать, но могут попросить те 10%, которые могут)

Re: Простейшая карта для сайта

Добавлено: 27 окт 2010, 12:03
Denis Rykov
nadiopt писал(а):2. Попробовать запихать карту во Флеш (Точно не скачают, но трудно, долго и необходимо знать мат.часть)
Попробуйте OpenScales - никогда до этого не работая во флеше, основываясь только на примерах, буквально за 10 минут получил такую штуку. Не знаю как OpenScales работает с растрами напрямую, но в любом случае можно поднять WMS на том же MapServer (на сайте есть подробная инструкция) и подключить в OpenScales WMS слой.

Re: Простейшая карта для сайта

Добавлено: 27 окт 2010, 21:42
bim2010
1. На карту должны быть нанесены наши "водяные знаки": название сайта и логотип компании
И так, карта у Вас в jpg.
Делаем прозрачный PNG с водяными знаками, растиражированный в размер карты. http://community.livejournal.com/ru_php/1424646.html
С помощью Global mapper например, склеиваем jpg + png в один растр.
2. Сделать так, чтобы карту нельзя было скачать.
От программиста защиты нет… Но от некоторой части пользователей можно.
1. Прозрачный Div над контентом.
2. <body onContextmenu="return false" onselectstart="return false">
3. BIS Development Kit
4. jpg файлов должно быть много, несколько сот тысяч.
Нарезать ваш растр можно с помощью инструмента MapTiler
Отобразить затем с помощью OpenLayers.Layer.TMS протокола, который вам поможет создать maptiler.
Скорость отображения вашей карты будет при таком исполнении максимальной.
Защищено ли такое решение? Нет. Впрочем, как не защищены карты Google maps, имеющие миллионы тайлов.
Впрочем, как не защищает вашу карту ни MapServer, ни flex.
Флеш (Точно не скачают, но трудно, долго и необходимо знать мат.часть)
Копию экрана еще никто не отменял, и написать обработку, соединяющую копирование экрана и перемещение на заданный диапазон …. по экрану…
Т.е. как бы Вы не хранили на сервере Ваши данные, даже если тайлы будут спрятаны в SQL, все равно на клиентской стороне вы их представите уже в виде удобном для восприятия, а значит и для скачивания.
Вывод - данные должны быть искажены на клиентской стороне.
Возьмем в руки бумажный атлас города, состоящий из нескольких десятков страниц.
Разошьем его и попробуем приложить страницы так, как будто мы хотим их склеить в одно полотно. В результате наших экспериментов мы увидим, что некоторые из страниц очень сильно расходятся. На листе A4 расхождение может составлять 15 мм.
Что -то подобное необходимо сделать с растром на стороне клиента.
Уточняю, что это надо сделать не с тайлом, и не с общим растром, а c тем изображением, которое отправляется клиенту по запросу (группа тайлов).
Что это будет “Гиперболический параболоид
http://www.pm298.ru/2pov4.php
или Лист Мёбиуса
http://www.mathnet.ru/php/getFT.phtml?j ... n_lang=rus
или из прямоугольника сделаете трапецию или ромб это уже дело вкуса и математической практики.
3. Возможность добавлять свои пометки на карте зарегистрированным пользователям.
Имеется: 300мб карт и сайт на Друпале.
Под Drupal интересное бесплатное решение:
Mapping kit: using OpenLayers and MapServer
http://aardbodem.nl/node/8
Название темы только поменяйте или возьмите в кавычки -
Простейшая карта для сайта

Re: Простейшая карта для сайта

Добавлено: 03 ноя 2010, 13:24
M@ster :-)
bim2010 писал(а):
1. На карту должны быть нанесены наши "водяные знаки": название сайта и логотип компании
И так, карта у Вас в jpg
....
Спасибо за столь подробный ответ, это - лучший ответ на те вопросы, которые я когда-либо задавал на форумах.

Немного расскажу, как у меня получилось решить проблему:
1. Нарезаем растр с помощью MapTiler. Получаем несколько уровней отображения карты и тучу png. файлов размером 256х256 пикселей. Также подготовим файл с водяным знаком соответствующих размеров.
2. На всю эту кучу файлов накладываем водяные знаки с помощью ImageMagick:
composite -watermark 15 -gravity South "watermark.png" result.png
-watermark 15 означает, что наложенный водяной знак будет видимым на 15%. Подробнее

Находим все файлы:
find /path/to/folder/with/tiles -name "*.png" > /path/to/filelist/files.list
и запускаем скриптик чтобы не переименовывать все вручную:
Текст простого скриптаShow
#!/bin/bash
MYFILES=/home/master/center/files.list
for name in $(awk 'BEGIN{FS=":"}{print $1}' < "$MYFILES" )
do
composite -watermark 15 -gravity South "/path/to/watermarkImage/watermark.png" $name $name
done
exit 0
3. Если вы работаете под Windows, то можно воспользоваться программой Watermark Master (скачать). Демоверсия доступна на 20 дней, поддерживает пакетное наложение водяных знаков.

Что имеется теперь: У нас есть нарезанная карта с водяными знаками в каждом тайле, OpenLayers для отображения. При попытке сохранения на маленьком масштабе теряется качество, при попытке сохранения в большем масштабе появляется необходимость сохранять кучу файлов и соединять их.
Кроме того, водяной знак затрудняет все это дело, особенно в печати
Что осталось: Требуется интегрировать карту с сайтом с помощью MappingKit, это просто не успел ещё попробовать.

Ещё раз большое спасибо bim2010!

Re: Простейшая карта для сайта

Добавлено: 09 дек 2010, 19:33
PbIXTOP
Из вариантов нанесения WaterMark
Запросы к тайлам прогонять не напрямую, а через дополнительный скрипт, который будет уже запрашивать кусок карты, накладывая на него watermark, и по возможности реализовывать защиту.
Соответственно для такой связки нужен прокси, который бы помог снизить нагрузку на скрипт, кешируя готовые изображения.

Re: Простейшая карта для сайта

Добавлено: 09 дек 2010, 20:12
Mavka
MapProxy умеет брать стопочку тайлов, печатать на них watermark и отдавать клиентам.