2010-04-30 11 views
6

तो, हमेशा चमकदार नारंगी डिफ़ॉल्ट नियमित बहुभुज को देखने से थक गए, मैं ओपनलेयर शैली को सीखने की कोशिश कर रहा हूं। मेरी शैली पर ही लागू होती,ओपनलेयर स्टाइल के साथ समस्या

 var layer_style = OpenLayers.Util.extend({},OpenLayers.Feature.Vector.style['default']); 
    layer_style.fillColor = "#000000"; 
layer_style.strokeColor = "#000000"; 
polygonLayer = new OpenLayers.Layer.Vector("PolygonLayer"); 
polygonLayer.style = layer_style; 

लेकिन ज्या मैं DrawFeature के साथ मेरे बहुभुज बनाते हुए हूँ एक बार मैं ड्राइंग पूरा कर लें, और यह चमकीले नारंगी से तस्वीर देखकर ग्रे:

मैं के साथ कुछ सफलता मिली है disconcerting की तरह है। तो, मैं अस्थायी शैलियों के बारे में सीखा है, और करने की कोशिश की:

var layer_style = new OpenLayers.Style({"default": {fillColor: "#000000"}, "temporary": {fillColor: "#000000"}}) 
polygonLayer = new OpenLayers.Layer.Vector("PolygonLayer"); 
polygonLayer.style = layer_style; 

यह मैं अभी भी एक नारंगी वर्ग मिला - जब तक मैं, ड्राइंग, जब यह पूरी तरह से अपारदर्शी काली में बोले बंद कर दिया। मुझे लगा कि शायद मुझे स्पष्ट रूप से fillOpacity सेट करना था ... कोई पासा नहीं। यहां तक ​​कि जब मैंने दोनों भरने वाले रंगों को क्रमशः गुलाबी और नीले रंग में बदल दिया, तब भी मैंने केवल नारंगी और अपारदर्शी काला देखा।

मैंने स्टाइलमैप्स के साथ गड़बड़ करने का प्रयास किया है, क्योंकि मैंने पढ़ा है कि यदि आप केवल शैली शैली में एक शैली जोड़ते हैं, तो यह अस्थायी शैली समेत सभी चीज़ों के लिए डिफ़ॉल्ट का उपयोग करता है।

var layer_style = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']); 
var style_map = new OpenLayers.StyleMap(layer_style); 
polygonLayer = new OpenLayers.Layer.Vector("PolygonLayer"); 
polygonLayer.style = style_map; 

इससे मुझे काला अपारदर्शी वर्ग भी मिला। (भले ही उस परत शैली को मानचित्र पर नहीं दिया जाता है)। नक्शा को परत पर स्वयं को पास करना:

polygonLayer = new OpenLayers.Layer.Vector("PolygonLayer", style_map); 

मुझे कुछ भी नहीं मिला। खींचे जाने के बाद भी ऑरेंज सभी तरह से।

polygonLayer = new OpenLayers.Layer.Vector("PolygonLayer", {styleMap: style_map}); 

बहुत अधिक सफल है: ड्रॉइंग करते समय ऑरेंज, खींचे जाने पर काला रूपरेखा के साथ पारदर्शी काला। जैसे कि मैंने मानचित्र का उपयोग नहीं किया था।

var style_map = new OpenLayers.StyleMap({"default": layer_style, "temporary": layer_style}); 

कोई अपारदर्शी वर्ग है, लेकिन अस्थायी के लिए कोई पासा काला करने के लिए अभी भी नारंगी स्नैप करना, या तो ...: समस्या, अभी भी कोई अस्थायी ...

मैं अपने नक्शा इस तरह से आरंभ करने की कोशिश की है, तो पारदर्शी। यहां तक ​​कि अगर मैं एक नई शैली (layer_style2) बनाता हूं, और उस पर अस्थायी सेट करता हूं, फिर भी कोई भाग्य नहीं है। और "चयन" शैली को सेट करने के साथ कोई भाग्य नहीं है।

मैं क्या गलत कर रहा हूं? अस्थायी आईएस उन चीजों को स्टाइल करने के लिए जो वर्तमान में स्केच किए जा रहे हैं, सही? क्या DrawFeature नियंत्रक के लिए विशिष्ट कोई अन्य तरीका है?

संपादित करें: स्थापित करने extendDefault सच हो करने में मदद करने के लिए प्रतीत नहीं होता है, या तो ...

var style_map = new OpenLayers.StyleMap({"default": layer_style, "temporary": layer_style}, {"extendDefault": "true"}); 

उत्तर

12

मैं इस समस्या के लिए दो समाधान मिल गया है। दोनों समाधानों में, आपको अपनी इच्छित कार्यक्षमता प्राप्त करने के लिए DrawFeature के कुछ पैरामीटर बदलना होगा।

1. DrawFeature की हैंडलर शैली बदलें। OpenLayers.Handler.Polygon में फ़ंक्शन ड्रॉफ़ेचर सुविधा के लिए हैंडलर की पैरामीटर शैली का उपयोग करता है। तो आपको इस शैली को बदलना होगा।

जब सुविधाओं का प्रयोग बनाने:

var drawPolygon = new OpenLayers.Control.DrawFeature(polygonLayer, OpenLayers.Handler.Polygon, {handlerOptions:{style:myStyle}}); 

बाद में, आप यह द्वारा बदल सकते हैं:

drawPolygon.handler.style = myStyle; 

2।DrawFeature का कॉलबैक बनाएं बदलें। कॉलबैक बनाने में नव निर्मित अस्थायी सुविधा की शैली बदलें।

var drawPolygon = new OpenLayers.Control.DrawFeature(polygonLayer, OpenLayers.Handler.Polygon, { 
     callbacks:{create: function(vertex, feature) { 
      feature.style = myStyle; 
      this.layer.events.triggerEvent("sketchstarted", {vertex:vertex,feature:feature}) 
}}}); 

इसी तरह, आप बाद में कॉलबैक बदल सकते हैं।

+3

आप, महोदय, एक प्रतिभाशाली हैं। यह मुझे पागल कर रहा था! जब मैं drawFeature के लिए हैंडलर विकल्पों के चारों ओर घूम रहा था, तो मुझे किसी भी प्रकार की "शैली" दिखाई नहीं दे रही थी, इसलिए मैंने सोचा कि यह एक विकल्प नहीं था ... मुझे पता था कि "पक्ष:" विकल्प था , और फिर भी, मुझे उस संदर्भ में नहीं मिला जहां उन्होंने एपीआई में उल्लेख किया था। धन्यवाद! – Jenny

+0

पहले समाधान का उपयोग करते हुए, अंतिम पॉलीगॉन को डबल-क्लिक करके पुष्टि हो जाने पर, शैली को डिफ़ॉल्ट पर रीसेट कर दिया जाता है, इसलिए अंत में मुझे शैली को रीसेट करने के लिए अभी भी कॉलबैक का उपयोग करने की आवश्यकता होती है। –

4

आप सभी वैक्टर एक निरंतर शैली का होना चाहते हैं, लेकिन नहीं उबाऊ नारंगी तो यह प्रयास करें:

vecLayer = new OpenLayers.Layer.Vector(
    "Route Layer", //layer name 
    {styleMap: new OpenLayers.StyleMap({ 
     pointRadius: "6", 
     fillColor: "#666666" 
    }), 
    renderers:renderer} 
); 

आप, गुण आप के साथ के बारे में छेड़छाड़ न कर सके का भार है इन पृष्ठों पर एक नजर है:

संबंधित मुद्दे