Все ли хорошо в Openlayers

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
bim2010
Гуру
Сообщения: 977
Зарегистрирован: 27 янв 2009, 22:57
Репутация: 258

Все ли хорошо в Openlayers

Сообщение bim2010 »

Благодаря Вашему форуму 01.01.2009 начал освоение Openlayers.
Спасибо администратору этого форума!

Создал пирамиду из .jpg 256*256 средний размер каждого ~ 7 Kb (у Googlemap точнее у Digital Globe ~ 7.5 Kb)
Использовал OpenLayers.Layer.TMS
Подобрал коеффициенты для расчета расстояний на карте – все в пределах допустимой погрешности.
Затем попробовал загрузить KML файл с векторными слоями.
Получилось, но загрузка недопустимо медленная.
Так что этот подход и все прочие текстовые и гипертекстовые оставляем только для ввода новой информации (по сп. навигаторам).

Подключил OpenLayers.Protocol.SQL.Gears
Это локальная база данных, построенная на основе sqlite
http://www.nestor.minsk.by/sr/2008/02/sr80204.html
Пока все замечательно.
Подключил интерфейс по сохранению в локальной базе векторных слоев (функции выбора объекта, групповое выделение объектов, корректировка, перемещение объектов, удаление, вывод информации по выбранным...)
Затем загрузил в google gears часть адресного плана - 20000 подписей зданий, подписи улиц.
Использовал "Point" с параметрами
OpenLayers.Style({
externalGraphic: "${img_url}",
rotation: "${angle}",
. . .
Google Gears в связке с Openlayers нормально работает, если на экране около 150 объектов типа "Point" + 20 объектов типа "Line" (транспортный граф). Мне необходимо отобразить 400 "Point" минимум на экране. В результате регулярно получаю ошибку:


? Сценарий, исполняемый на этой странице, возможно занят или не отвечает. Вы можете остановить его сейчас или продолжить и посмотреть сможет он завершить свою работу.


Вы скажете теперь поставь Mapserver или Geoserver с WFS-T на сервере.
Две проблемы :
1. Как я понимаю Mapserver или Geoserver преобразуют векторные слои в битмап,
Нарежут битмап в пропорциях моего масштаба и отобразят их поверх моего основного слоя TMS
При просмотре на http://maps.google.ru/ HYBRID поверх .jpg наложен прозрачный .png
Предполагаю это занимет 20-30 Kb
Все неплохо только где интерактив.

2. У хостера минимальный джентельменский набор из Apache+Php+MySQL
Устанавливать Mapserver пока отказывается.


Так что вопрос про PHPGIS актуален.

Собираюсь переписать Protocol.SQL.Gears на Php+MySQL


Вопросы:

Вопрос 1. Я не нашел в Openlayers инструмента "Текст" - инструмент используется для рисования текста (букв и цифр). При этом можно выбирать шрифт и угол поворота текста.

Тема надписи под углом
Варианты решений
Php
imagettftext(image, size, angle, x, y, col, fontfile, text)

Требуется библиотека GD

http://mysitez.km.ua/Programming/?graphfunc

«Работа с изображениями в PHP (часть первая)»).
- Наверное самый легкий в написании вариант
Но в результате мы посылаем битмап с сервера. Когда их несколько сотен на экране ….

Еще вариант нарезать прозрачных .gif или .png с буквами и цифрами.

Вариант – вставка java aplet в html - требует установки java на клиенте.

Вариант – использование на клиентской стороне activx компонент.

Другой вариант – использование библиотеки JavaScript

Raphaël—JavaScript Library
http://raphaeljs.com/

Пример поворота текста
text-rotation.html
Текст преобразует в битмап и поворачивает его. Но это уже происходит на клиентской стороне. В Openlayers есть возможность повернуть в point:

Код: Выделить всё

           var myStyles = new OpenLayers.StyleMap({
                "default": new OpenLayers.Style({
// для point
                           externalGraphic: "${image}",
// угол поворота  битмапа
                            rotation: "${angle}",
. . .

Задача сводится к преобразованию текста в битмап.




Другой вариант без преобразования в битмап:

Код: Выделить всё

<html>

<head>

<title>Текст расположен под заданным углом  на странице</title>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

<STYLE>

.positioned { position: relative; color:red}

</STYLE>

<SCRIPT>


var id = 0;

function displayTextDiagonal (text, down, deg, lsp) {

  deg = deg || 45;

  deg = Math.PI / 180 * deg;

  lsp = lsp || 10;

  dy = lsp * Math.tan(deg);

  var html = '';

  html += '<DIV ID="td' + id + '"' + ' CLASS="positioned"' + '>';

  if (down) {

    for (var r = 0; r < text.length; r++) {

      html += '<SPAN ID="td' + id + r 

             + '" CLASS="positioned" STYLE="left: ' 

             + (r * lsp) + 'px; top: ' + (r * dy) + 'px;">'; 

      html += text.charAt(r);

      html += '</SPAN>';

    }

  }

  else {

    for (var r = 0; r < text.length; r++) {

      html += '<SPAN ID="td' + id + r 

              + '" CLASS="positioned" STYLE="left: ' 

              + (r * lsp) + 'px; top: ' 

              + ((text.length - r) * dy) + 'px;">'; 

      html += text.charAt(r);

      html += '</SPAN>';

    }

  }

  html += '<\/DIV>';

  id++;

  document.write(html);

}

</SCRIPT>



</head>



<body bgcolor="#FFFFFF" text="#000000">

<SCRIPT>

//displayTextDiagonal('Web Designs and', true, 80, 2);

</SCRIPT>

<SCRIPT>

for (var xx = 0; xx < 360; xx++) {

displayTextDiagonal('012345', false, xx, 2);


    }






</SCRIPT>


</body>

</html> 

А для поворота букв можно использовать шрифт под углом. Беру редактор шрифтов, поворачиваю все буквы на заданный угол. Я сделал шрифты через каждые 15". Попробовал вывести на одном экране до 50000 букв - работает.

Предложите ваши варианты решений.


Вопрос 2. Как в OpenLayers на крупных масштабах убрать векторные слои?

Пробовал вот так:

if (map.getZoom() < 7) {
vector.renderer.destroy();
}
Это не работает
Если по кнопке vector.renderer.destroy(); - работает
. . .
function clear_data() {
// vector.destroyFeatures();
vector.renderer.destroy();
}
. . .
<li><a href="javascript:clear_data();">Clear vector</a></li>

Пример если можно ?




Вопрос 3. Кеширование слоев Google maps в Openlayers

У меня кеширование происходит только в одном сеансе работы.
То есть покружил я над своим городом при втором заходе уже все .jpg грузятся быстрее (локально).
Если я закрыл браузер (FF) и заново его открыл - все заново кешируется.
Хотелось бы кешировать как Google Earth.
Аватара пользователя
wmk
Активный участник
Сообщения: 102
Зарегистрирован: 11 янв 2009, 17:38
Репутация: 0
Откуда: Казань
Контактная информация:

Re: Все ли хорошо в Openlayers

Сообщение wmk »

bim2010 писал(а): ... У хостера минимальный джентельменский набор из Apache+Php+MySQL
Устанавливать Mapserver пока отказывается.
Так что вопрос про PHPGIS актуален ...
Есть такая фишка как VPS хостинг ... стоит он от 500 руб и за 1000 нормальный взять можно.
Там дают якобы выделенный сервер с установленным Linux'ом (убунту) или чистый.

C которым можно делать наверное почти всё что душе угодно.
Это я про hc.ru (у меня сайт у них лежит).
Кстати вот ссылка http://hc.ru/ru/services/hosting/vps/

Но тут возникает вопрос , а потянет ли комп (2×800) Mapserver например ... с учетом того что на него зайдут одновременно 100-200 пользователей.

Да если у кого то есть тесты на производительность ... пишите
OurGuns.ru - пневматическое оружие России и мира
Пневматическое оружие , Страйкбольное оружие , Пейнтбольное оружие
Ответить

Вернуться в «Веб-картография»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя