Здесь показаны различия между двумя версиями данной страницы.
playground:отображение_на_карте_произвольной_информации_точек_картинок_и_т.п._из_базы_данных [08/03/2011 15:20] 93.91.4.251 |
— (текущий) | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | SAS Планета имеет средства для работы с метками. К сожалению, их функциональность имеет некоторые ограничения. | ||
- | |||
- | К числу востребованных задач, решить которые встроенными средствами проблематично, в частности относятся следующие: | ||
- | - Отображение точек на основании информации из базы данных | ||
- | - Изменять отображаемую информацию без перезапуска программы SAS Планета | ||
- | - Возможность редактирования точек, как средствами СУБД, так и из программы SAS Планета в многопользовательском режиме. | ||
- | |||
- | __Решить все эти задачи возможно путем создания собственного слоя, накладываемого поверх карты.__ | ||
- | |||
- | {{:playground:intro.jpg?360|}} | ||
- | |||
- | Это совсем не сложно, если Вы знаете, что такое PHP, MySQL. Как это сделать, мы сейчас и разберем. | ||
- | |||
- | Вам понадобится веб-сервер с установленным PHP, MySQL. Разумеется, вы можете просто установить эти приложения на тот же компьютер, на котором находится SAS Планета. | ||
- | |||
- | Обратите внимание! | ||
- | - В моем примере используется ряд функций PHP по работе с изображениями. Модуль для работы с изображениями (gd2) в PHP по умолчанию выключен. В случае PHP для Windows для того, чтобы включить его, в файле php.ini уберите комментарий в начале строки ''extension=php_gd2.dll'' А если такой строки нет - добавьте ее. После чего перезапустите службу веб-сервера. | ||
- | - Чтобы было проще работать с MySQL, установите какое-нибудь средство управления MySQL сервером, например phpMyAdmin | ||
- | |||
- | **Скачайте и распакуйте файл с примером: sas_demo_db.zip.** | ||
- | |||
- | - Содержимое каталога htdocs скопируйте в каталог document_root веб-сервера. | ||
- | - Туда же скопируйте файл arial.ttf (взять в каталоге windows\fonts). | ||
- | - В файле config.inc.php (находится в document_root) настройте параметры подключения к MySQL серверу | ||
- | - Создайте на MySQL сервере базу данных sasdemo. Импортируйте в нее дамп sasdemo.sql.gz. | ||
- | - Содержимое каталога sas (со всеми подкаталогами) следует скопировать в каталог SAS Планеты. | ||
- | - Удалите файл maps.ini из каталога maps SAS Планеты (для того, чтобы программа заново создала список карт). | ||
- | - В том случае, если веб-сервер стоит на другом компьютере (т.е. не на 127.0.0.1), то: | ||
- | * в каждом из каталогов программы SAS Планета | ||
- | * \maps\sas.maps\demodb\png | ||
- | * \maps\sas.maps\demodb\kml | ||
- | * \maps\sas.maps\demodb\razmetka | ||
- | (это три наших новых слоя, зачем столько - расcкажу позже) необходимо отредактировать файлы params.txt. В параметре DefUrlBase укажите имя или IP адрес веб-сервера (вместо стоящего по умолчанию значения 127.0.0.1). | ||
- | * в каталоге SAS Планеты необходимо отредактировать файл sascm.ini, в нем указать адрес веб-сервера (вместо стоящего по умолчанию значения 127.0.0.1) | ||
- | |||
- | **Можно начинать** | ||
- | |||
- | - Запустите SAS Cache Manager - файл sascm.exe (из каталога SAS Планеты). Что это такое - см. ниже. Он сам запустит SAS Планету. | ||
- | - Включите слои DemoDB - картинки (png) и DemoDB - подписи (kml) | ||
- | - Найдите на карте Москву и установите масштаб так, чтобы Москва заняла весь экран. Вы должны увидеть картинку, как в начале статьи. | ||
- | |||
- | **Как редактировать/удалять точки** | ||
- | |||
- | - Средствами СУБД (например, с помощью phpMyAdmin) | ||
- | - Непосредственно из SAS Планеты. | ||
- | * Для этого два раза кликните по белому квадратику рядом с иконкой точки. Откроется окно с информацией о точке и ссылками для редактирования/удаления точки. | ||
- | * Отредактируйте информацию и нажмите "Сохранить". Закройте окно редактирования. Обновите слои с точками (масштаб увеличить - подождать 4 сек - масштаб уменьшить. Если слой не обновился - мало ждали). | ||
- | |||
- | К сожалению, в этом окне срабатывают "горячие" клавиши SAS Планеты. Избежать этого можно следующим образом: | ||
- | * в окне, которое открывается после двойного клика по карте, ссылку "Отредактировать точку" кликайте, держа нажатой клавишу Shift. В этом случае форма редактирования откроется в окне браузера а не дочернем окне SAS Планеты. | ||
- | |||
- | **Как добавлять точки** | ||
- | |||
- | - Средствами СУБД | ||
- | - Непосредственно из SAS Планеты | ||
- | * Включите слой DemoDB - разметка (kml). | ||
- | * Увеличьте масштаб для точного позиционирования | ||
- | * кликните по тому месту, куда Вы хотите добавить точку | ||
- | * Дальше действия аналогичны редактированию точки | ||
- | * После добавления отключите слой DemoDB - разметка (kml) и обновите слои с точками. | ||
- | |||
- | **Как это работает** | ||
- | |||
- | В программе SAS планета карты состоят из тайлов (tile - черепица), т.е. подогнанных друг к другу кусочков. Их размер - 256х256 точек (пикселей). | ||
- | При запуске программа начинает запрашивать тайлы с сервера с картами. Это наглядно видно, когда вы выбираете место, которое еще ни разу не посещали (иначе карты грузятся из кэша). Происходит это так в соответствие с параметрами карты настроенными в файлах params.txt и GetUrlScript.txt zmp. | ||
- | |||
- | В нашем примере на веб-сервер будут переданы координаты сторон тайла (долгота/широта), его абсолютные координаты и текущий масштаб. (Последние 3 параметра нужны для управления кэшем - см. ниже). | ||
- | |||
- | На веб-сервере эти координаты передаются скрипту map.php который на их основании запрашивает из БД MySQL информацию по всем объектам, которые находятся в этом тайле. | ||
- | На основании этих данных скрипт генерирует тайл с метками (KML) и возвращает его SAS Планете. | ||
- | Однако SAS Планета поддерживает KML его не в полной мере. Фактически, можно вывести небольшую белую точку с черной окантовкой либо многоугольник. | ||
- | А нам-то надо выводить надпись и картинки. Для того, чтобы это сделать, создается еще один слой - графический. | ||
- | |||
- | Вы можете включить слои DemoDB - метки (kml) и DemoDB - картинки (png) по отдельности, чтобы было понятно, что представляет из себя каждый слой. | ||
- | |||
- | Кроме того, нам необходимо иметь возможность добавлять точки в произвольное место на карте. Для этого используется слой DemoDB - разметка (kml) который заполняет весь экран "кликабельными" метками. | ||
- | |||
- | **Что такое sascm.exe** | ||
- | |||
- | SAS Планета имеет три режима работы с кэшем (только кэш, кэш/интернет, только интернет). Однако все эти режимы являются общими и для карты и для всех слоев. Для наших целей это не вполне подходит. В отличие от слоев вроде Panoramio или Wikimapia наш слой может обновляться достаточно часто - в т.ч. каждую минуту. | ||
- | Фактически нам необходимо, чтобы слои с информацией из БД работали в режиме только интернет, а слой с картой - в режиме кэш + интернет или вообще только кэш. | ||
- | Эту задачу решает программа SAS Cache Manager (sascm.exe). Она запрашивает у веб-сервера информацию о выводимых тайлах слоев к веб-серверу и удаляет из кэша уже отображенные тайлы. | ||
- | |||
- | Для настройки sascm используется файл sascm.ini | ||
- | * ''MapServer=127.0.0.1'' - имя или IP адрес сервера со слоем. | ||
- | * ''ClientName=client1'' - имя клиента. Можно не задавать, в этом случае в качестве имени используется IP адрес клиента. Необходимо для того, чтобы различать запросы от разных клиентов в условиях, когда к одной и той же базе подключено несколько пользователей. | ||
- | * ''MapCaches=demopng,demokml,demorazmetka'' - имена каталогов с кэшами слоев, которые надо "чистить". Должны совпадать со значениями, указанными в параметре 'NameInCache' в файлах params.txt этих слоев. | ||
- | |||
- | Непосредственно после запуска sascm проверяет, запущена ли SAS Планета и если не запущена - запускает ее. Сделано для того, чтобы не надо было запускать 2 файла. | ||
- | |||
- | После запуска sascm.exe с интервалом 3 сек: | ||
- | - Проверяет, запущена ли SAS Планета. Если такого приложения не запущено (т.е. пользователь закрыл SAS Планету), то sascm тоже завершает свою работу. | ||
- | - Если SAS планету запущена, то запрашивает у веб-сервера координаты и масштаб последнего сгенерированного тайла. | ||
- | Далее из каталога с кэшем для выбранных слоев | ||
- | * стираются все файлы, относящиеся к масштабам, отличающимся от текущего | ||
- | * стираются все файлы текущего масштаба, отстоящие от текущего (последнего запрошенного) тайла более, чем на 1 экран | ||
- | |||
- | Если при работе с SAS Планетой Вам необходимо принудительно обновить текущий слой, то: | ||
- | * уменьшите масштаб, подождите 4 секунды, увеличьте масштаб. Слой начнет отрисовываться по-новой. | ||
- | |||
- | Разумеется, что если Вы работаете в режиме "только Интернет", то будет работать и без sascm. | ||
- | |||
- | Исходники - находятся в каталоге SASCM_Src. | ||