Разбор примеров OL

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
doox911
Участник
Сообщения: 54
Зарегистрирован: 14 мар 2013, 18:13
Репутация: 0

Разбор примеров OL

Сообщение doox911 » 21 ноя 2013, 23:58

Пример всплывающей подсказки.

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

popup = new OpenLayers.Popup("chicken",
                   new OpenLayers.LonLat(5,40),
                   new OpenLayers.Size(200,200),
                   "example popup",
                   true);

map.addPopup(popup);
Как, Я, не пытался добавить цвет фона, у меня ничего не выходит. Как добавить цвет фона или рамку?

doujin
Активный участник
Сообщения: 163
Зарегистрирован: 28 июн 2012, 01:02
Репутация: 84
Откуда: Vladivostok

Re: Разбор примеров OL

Сообщение doujin » 22 ноя 2013, 00:51

Справка говорит, что так (фон, прозрачность, рамка соответственно):

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

popup.setBackgroundColor("#ffbbbb")
popup.setOpacity(0.5)
popup.setBorder("2px")

Или через CSS поправить стили для классов всплывающих подсказок.

ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 748
Ваше звание: Вредитель полей

Re: Разбор примеров OL

Сообщение ericsson » 22 ноя 2013, 04:12

HTML-код вывода popup-ов в OL ужасно громоздкий из-за того, что они тащат совместимость со старьем всяким. Так что манипуляции с ними чреваты глюками. Я в свое время под одного клиента переделывал через CSS весь вывод, чтобы заставить их выглядеть по-человечески и не так, как в оригинале.

doox911
Участник
Сообщения: 54
Зарегистрирован: 14 мар 2013, 18:13
Репутация: 0

Re: Разбор примеров OL

Сообщение doox911 » 22 ноя 2013, 08:51

ericsson писал(а):HTML-код вывода popup-ов в OL ужасно громоздкий из-за того, что они тащат совместимость со старьем всяким. Так что манипуляции с ними чреваты глюками. Я в свое время под одного клиента переделывал через CSS весь вывод, чтобы заставить их выглядеть по-человечески и не так, как в оригинале.
Тогда объясните пожалуйста. Вот есть описание того же Popup. Что выполняют Properties,Functions,Properties(Следующие за функциями по мануалу),Constructor(как его правильно использовать) и Functions.

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Разбор примеров OL

Сообщение Denis Rykov » 22 ноя 2013, 10:14

А что не понятного, Functions - это методы объекта класса OpenLayers.Popup, Properties - его свойства, в Constructor приведена сигнатура функции-конструктора (функции, создающей новый объект и вызывающуюся стандартно в JavaScript с ключевым словом new).
Spatial is now, more than ever, just another column- The Geometry Column.

ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 748
Ваше звание: Вредитель полей

Re: Разбор примеров OL

Сообщение ericsson » 22 ноя 2013, 11:19

Стесняюсь спросить, уважаемый топикстартер, а вы вообще с JavaScript знакомы, или первый раз видите?
Потому что как-бы это все базовые понятия.
А еще я не вижу логической связи, на которую указывает ваше вводное "тогда". Потому что то, что в OL через задницу сделаны popup-ы (о чем я говорю в процитированном), никак не связано с базовыми понятиями программирования вообще и JS как частности (о которых вы спрашиваете далее).

doox911
Участник
Сообщения: 54
Зарегистрирован: 14 мар 2013, 18:13
Репутация: 0

Re: Разбор примеров OL

Сообщение doox911 » 22 ноя 2013, 19:21

ericsson писал(а):Стесняюсь спросить, уважаемый топикстартер, а вы вообще с JavaScript знакомы, или первый раз видите?
Потому что как-бы это все базовые понятия.
А еще я не вижу логической связи, на которую указывает ваше вводное "тогда". Потому что то, что в OL через задницу сделаны popup-ы (о чем я говорю в процитированном), никак не связано с базовыми понятиями программирования вообще и JS как частности (о которых вы спрашиваете далее).
Тупанул. Сильно!)
Просто мне не понятен следующий факт:

Создание обычных объектов в JS:
1. Способ:
var obj = { prop1:"Это первое свойство",prop2:"Это второе свойство"}ж
2. Способ:
var obj = new obj();

А тут Я встречаю примеры типа:

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

popup = new OpenLayers.Popup( 
 "chicken",
 new OpenLayers.LonLat(5,40),
 new OpenLayers.Size(200,200),
 "example popup",
  true
);
и:

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

var map = new OpenLayers.Map({ 
    div: "map",
    layers: [
        new OpenLayers.Layer.OSM("OSM (without buffer)"),
        new OpenLayers.Layer.OSM("OSM (with buffer)", null, {buffer: 2})
    ],
    controls: [
        new OpenLayers.Control.Navigation({
            dragPanOptions: {
                enableKinetic: true
            }
        }),
        new OpenLayers.Control.PanZoom(),
        new OpenLayers.Control.Attribution()
    ],
    center: [0, 0],
    zoom: 3
});
Описание очень странное. Вот это свойство: center: [0, 0], ,А это что?

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

 controls: [
        new OpenLayers.Control.Navigation({
            dragPanOptions: {
                enableKinetic: true
            }
        }),
        new OpenLayers.Control.PanZoom(),
        new OpenLayers.Control.Attribution()
    ],
И это:

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

new OpenLayers.LonLat(5,40),

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Разбор примеров OL

Сообщение Denis Rykov » 22 ноя 2013, 19:30

Сформулируйте четко, что вам не ясно. Вам не ясно, что такое "center: [0, 0]"? В данном случае это атрибут объекта класса OpenLayers.Map, определяющий начальное положение центра карты, представлен в виде массива, состоящего их двух элементов. Не ясно что такое "controls"? Также атрибут, содержащий массив контролов карты. "new OpenLayers.LonLat" - вызов конструктора объекта класса OpenLayers.LonLat. Вроде все очевидно.
Spatial is now, more than ever, just another column- The Geometry Column.

doox911
Участник
Сообщения: 54
Зарегистрирован: 14 мар 2013, 18:13
Репутация: 0

Re: Разбор примеров OL

Сообщение doox911 » 22 ноя 2013, 19:36

Denis Rykov писал(а):Сформулируйте четко, что вам не ясно. Вам не ясно, что такое "center: [0, 0]"? В данном случае это атрибут объекта OpenLayers.Map, определяющий начальное положение центра карты, представлен в виде массива, состоящего их двух элементов. Не ясно что такое "controls"? Также атрибут, содержащий массив контролов карты. "new OpenLayers.LonLat" - вызов конструктора объекта класса OpenLayers.LonLat. Вроде все очевидно.
Мне не ясно само описание. Я не случайно привёл описание объектов в ECMAScript5. А тут же, Я встречаю описания типа:

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

popup = new OpenLayers.Popup( 
 "chicken",
 new OpenLayers.LonLat(5,40),
 new OpenLayers.Size(200,200),
 "example popup",
  true
);
Хотя должно быть (по тому, как Я это понимаю):

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

popup = new OpenLayers.Popup( 
 имя свойства : "chicken",
 new OpenLayers.LonLat(5,40), - тут вообще непонятно, где тут свойство, а где значение
 new OpenLayers.Size(200,200), - аналогично
 имя свойства : "example popup",
 имя свойства : true
);
Аналогично и во втором коде.

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Разбор примеров OL

Сообщение Denis Rykov » 22 ноя 2013, 19:44

Эммм. Вы с JavaScript вообще знакомы? Объект можно создать одним из двух способов: с помощью литерала:

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

a = {name: 'Java', lastname: 'Script'}
либо с помощью функции-конструктора:

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

function A(name, lastname) {
    this.name = name;
    this.lastname = lastname;
}
a = new A('Java', 'Script');
тут вообще непонятно, где тут свойство, а где значение
В документации посмотрите сигнатуру функции-конструктора OpenLayers.Popup, тогда станет понятно какой аргумент должен передаваться вторым в списке. В случае с OpenLayers.Map - функции-конструктору в вашем примере просто передается всего лишь один единственный аргумент, представленный в виде объекта, а в OpenLayers.Popup несколько аргументов, вас это смущает? То есть в упрощенном варианте конструктор OpenLayers.Map можно представить так:

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

function M(options){
    this.name = options.name;
    this.lastname = options.lastname;
}
m = new M({name: 'Java', lastname: 'Script'});
Spatial is now, more than ever, just another column- The Geometry Column.

doox911
Участник
Сообщения: 54
Зарегистрирован: 14 мар 2013, 18:13
Репутация: 0

Re: Разбор примеров OL

Сообщение doox911 » 22 ноя 2013, 20:48

a = new A('Java', 'Script');
m = new M({name: 'Java', lastname: 'Script'});

То есть, можно так и так?
Знаком. Но серьёзного ничего не писал.

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Разбор примеров OL

Сообщение Denis Rykov » 22 ноя 2013, 20:52

Можно либо так, либо так, но не обоими способами одновременно - это зависит от того как устроена функция-конструктор.
Spatial is now, more than ever, just another column- The Geometry Column.

doox911
Участник
Сообщения: 54
Зарегистрирован: 14 мар 2013, 18:13
Репутация: 0

Re: Разбор примеров OL

Сообщение doox911 » 28 ноя 2013, 01:16

В связи с тем, что библиотеки похожи.
Вот код:

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

var zoom = new L.control.zoom({
 options:{
    position: 'topleft',
    zoomInText: '+_+',
    zoomOutText: '-+-',
    zoomInTitle: ' in',
    zoomInTitle: 'out'
 }
}); 
zoom.addTo(map); 
Библиотека: leafletjs
Мануал
На карте появляется панель увеличения/уменьшения. Но она стандартна. То есть не отображает моих плюсов и минусов. Почему?

И как правильно следует понимать вот это описание:

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

L.control( <Control options> options? )
<Control options> - понятно,что писать. options? - не понятно. И как они между собой разделяются?

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Разбор примеров OL

Сообщение Denis Rykov » 28 ноя 2013, 04:46

<Control options> - это ссылка на описание возможных опций, options - это текстовое описание параметра конструктора, ? - означает, что параметр необязательный. В вашем случае создание контрола должно выглядеть так:

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

var zoom = new L.control.zoom({
    position: 'topleft',
    zoomInText: '+_+',
    zoomOutText: '-+-',
    zoomInTitle: ' in',
    zoomInTitle: 'out'
});
И не валите вопросы в одну тему, один вопрос - одна тема.
Spatial is now, more than ever, just another column- The Geometry Column.

Ответить

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

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

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