опциональные векторные функции z-индексации - PullRequest
3 голосов
/ 15 февраля 2011

Мне трудно понять z-индексацию векторных функций.

Когда я искал информацию в Интернете, я нашел следующие ссылки: http://openlayers.org/dev/examples/ordering.html http://osgeo -org.1803224.n2.nabble.com / Bug-в-использовании-graphicZIndex-td2648665.html а также http://osgeo -org.1803224.n2.nabble.com / graphicZIndex-оф-вектор-функций-td3919627.html

То, что я сделал, настраивало стили, как они показаны в первой ссылке:

 this.vectorsLayer = new OpenLayers.Layer.Vector("Vectors", {
                styleMap: new OpenLayers.StyleMap({
                    "default": {
                    'strokeColor': "#ff9933",
                    'strokeWidth': 5
                    },
                    "select": {
                        'strokeColor': "#3399ff"
                    }
                })
            }
        );
    this.carsLayer = new OpenLayers.Layer.Vector("Cars", {'rendererOptions': {yOrdering: false, zIndexing: true}});

     this.startIconStyle = {'externalGraphic':this.startIconUrl};

     this.parkIconStyle = {'externalGraphic':this.parkIconUrl};

     this.endIconStyle = {'externalGraphic':this.endIconUrl};

     this.defaultStyles = {
             //'label':getLabel(),
             'graphicZIndex':745,
            'graphicXOffset':-13,
            'graphicYOffset':-41,
            'graphicWidth':26,
            'graphicHeight':41,
            'strokeLinecap':'round',
            'strokeColor':"#000000",
            'strokeWidth':2,
            'strokeOpacity':1,
            'fillOpacity':1}
        //style of path that car has used 
    this.drivedStyle = {
            'strokeWidth': 3,
            'strokeOpacity': 1,
            'strokeColor': "#3399ff",
            'strokeDashstyle': "dash"
        }

И когда я создаю маркеры, я делаю это так:

var routePoint = this.points[this.routePos].clone();
var newstyleSite = OpenLayers.Util.extend(this.startIconStyle, this.defaultStyles ,OpenLayers.Feature.Vector.style['default']);
this.routePointFeature = new OpenLayers.Feature.Vector(routePoint, {}, newstyleSite);
this.vectorsLayer.addFeatures(this.routePointFeature);

И когда я смотрю на z-индекс этого маркера - для z-index установлено значение auto, а не 745, которое находится в this.defaultStyles.

Это приводит нас к 3-й ссылке ... которую я вообще не могу понять, потому что установка стилей в любом другом месте дает ровно столько, сколько я получаю прямо сейчас.

Ни один не делает

this.routePointFeature.attributes.zIndex = 745; 

изменить что-либо вообще. Несмотря на то, что он, очевидно, работает с этой первой ссылкой / примером.

Как должна работать эта z-индексация? И почему это не работает в моем случае? Что я делаю неправильно? Или там что-то прослушивается?

Редактировать: Многие люди просмотрели этот вопрос и проголосовали за ответ. Тем не менее, мне приходилось иметь дело с другими вещами, и я некоторое время не работал с opelayers. Могут ли некоторые люди, которые видели этот ответ, подтвердить, что ответ работает, и я могу принять его?

Alan

1 Ответ

7 голосов
/ 15 февраля 2011

Вы должны включить z-индексирование для векторного слоя.

this.vectorsLayer = new OpenLayers.Layer.Vector("Vectors", {
  styleMap: <your style map>,
  rendererOptions: { zIndexing: true }
});

Кроме того, OpenLayers.Util.extend принимает только два параметра, и первый параметр - это пункт назначения (т. Е. Второй параметр, источник, будет объединен в него). Если вы хотите объединить несколько объектов, вы можете использовать jQuery.extend или несколько вызовов OpenLayers.Util.extend:

OpenLayers.Util.extend(this.startIconStyle, OpenLayers.Feature.Vector.style['default'] );
OpenLayers.Util.extend( this.startIconStyle, this.defaultStyles );

или

jQuery.extend( this.startIconStyle, OpenLayers.Feature.Vector.style['default'], this.defaultStyles );

И то, и другое приведёт к этому .startIconStyle, содержащему объединение this.startIconStyle, OpenLayers.Feature.Vector.style ['default'] и this.defaultStyles.

То, что вы действительно хотите, это:

var newstyleSite = {};
jQuery.extend( newstyleSite,  OpenLayers.Feature.Vector.style['default'], this.defaultStyles, this.startIconStyle );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...