दिलचस्प पोस्ट
मैं MongoDB में सभी दस्तावेजों के लिए एक फ़ील्ड का नाम कैसे बदल सकता हूँ? एक शब्दकोश के भीतर न्यूनतम मूल्य के समान कुंजी प्राप्त करें आपके जावास्क्रिप्ट कोड के दस्तावेज के लिए कौन से विकल्प उपलब्ध हैं? Angularjs2 – आवेदन शुरू होने से पहले प्रीलोड सर्वर कॉन्फ़िगरेशन क्यों strncpy नल समाप्त नहीं करता है? पायथन में महीने का अंतिम दिन प्राप्त करें कोणीय 2: घटक को प्रतिपादन से पहले डेटा कैसे लोड करें? दिए गए url से डोमेन नाम प्राप्त करें संपूर्ण एंड्रॉइड ऐप के लिए डिफॉल्ट फ़ॉन्ट परिवार कैसे सेट करें PHP सरणियों को संग्रहीत करने के लिए पसंदीदा विधि (json_encode vs serialize) एचटीएमएल टेक्सटेरा में अधिकतम लंबाई सेट करें JavaFX2: क्या मैं एक पृष्ठभूमि कार्य / सेवा रोक सकता हूं? जड़ क्या हैं? अगले पृष्ठ पर PHP पास चर GitHub पर होस्ट की गई बाहरी JavaScript फ़ाइल को लिंक और निष्पादित करें

Google मानचित्र एपीआई v3 में एसवीजी मार्करों का उपयोग कैसे करें

क्या मैं अपने कनवर्ट की गई छवि.svg को Google मानचित्र आइकन के रूप में इस्तेमाल कर सकता हूं। मैं अपनी पीजीजी छवि को एसवीजी में परिवर्तित कर रहा था और मैं इस तरह के गूगल मैप के प्रतीक का इस्तेमाल करना चाहता हूं जो घुमाया जा सकता है। मैं पहले से ही गूगल मैप के प्रतीक का इस्तेमाल करने की कोशिश कर रहा था लेकिन मैं चाहता हूं कार, ​​आदमी, इत्यादि जैसे एक आइकन … इसलिए मैंने अपने कुछ पीएनजी फाइलों को एसवीजी में बदल दिया। बस इस उदाहरण साइट की तरह वह इन http://www.goprotravelling.com/ के लिए क्या उपयोग करता है

वेब के समाधान से एकत्रित समाधान "Google मानचित्र एपीआई v3 में एसवीजी मार्करों का उपयोग कैसे करें"

आप एसवीजी पथ नोटेशन का उपयोग करके अपने आइकन को रेंडर कर सकते हैं।

अधिक जानकारी के लिए Google दस्तावेज़ देखें

यहां एक बुनियादी उदाहरण दिया गया है:

var icon = { path: "M-20,0a20,20 0 1,0 40,0a20,20 0 1,0 -40,0", fillColor: '#FF0000', fillOpacity: .6, anchor: new google.maps.Point(0,0), strokeWeight: 0, scale: 1 } var marker = new google.maps.Marker({ position: event.latLng, map: map, draggable: false, icon: icon }); 

मार्कर एसवीजी आइकन को प्रदर्शित करने और मापने के तरीके पर यहां एक उदाहरण है:

JSFiddle डेमो

संपादित करें:

जटिल आइकन के साथ यहां एक अन्य उदाहरण:

JSFiddle डेमो

2 संपादित करें:

और यहां बताया गया है कि आप एक एसवीजी फ़ाइल को एक आइकन के रूप में कैसे प्राप्त कर सकते हैं:

JSFiddle डेमो

यदि आपको पूर्ण एसटीवीजी की जरूरत नहीं है तो आप केवल एक पथ की जरूरत है और आप इसे क्लाइंट साइड पर संशोधित करना चाहते हैं (उदाहरण के लिए पाठ बदलें, विवरण छिपाएं …) आप एसवीजी के साथ एक वैकल्पिक डेटा 'यूआरएल' का उपयोग कर सकते हैं:

 var svg = '<svg width="400" height="110"><rect width="300" height="100" /></svg>'; icon.url = 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(svg); 

जावास्क्रिप्ट (फ़ायरफ़ॉक्स) बीटाओ () एसवीजी पाठ से बेस 64 एन्कोडिंग प्राप्त करने के लिए उपयोग किया जाता है। आधार डेटा यूआरएल जेनरेट करने के लिए आप http://dopiaza.org/tools/datauri/index.php भी उपयोग कर सकते हैं।

यहां एक पूर्ण उदाहरण है jsfiddle :

 <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> <script src="http://maps.google.com/maps/api/js?sensor=false" type="text/javascript"></script> </head> <body> <div id="map" style="width: 500px; height: 400px;"></div> <script type="text/javascript"> var map = new google.maps.Map(document.getElementById('map'), { zoom: 10, center: new google.maps.LatLng(-33.92, 151.25), mapTypeId: google.maps.MapTypeId.ROADMAP }); var template = [ '<?xml version="1.0"?>', '<svg width="26px" height="26px" viewBox="0 0 100 100" version="1.1" xmlns="http://www.w3.org/2000/svg">', '<circle stroke="#222" fill="{{ color }}" cx="50" cy="50" r="35"/>', '</svg>' ].join('\n'); var svg = template.replace('{{ color }}', '#800'); var docMarker = new google.maps.Marker({ position: new google.maps.LatLng(-33.92, 151.25), map: map, title: 'Dynamic SVG Marker', icon: { url: 'data:image/svg+xml;charset=UTF-8,' + encodeURIComponent(svg), scaledSize: new google.maps.Size(20, 20) }, optimized: false }); var docMarker = new google.maps.Marker({ position: new google.maps.LatLng(-33.95, 151.25), map: map, title: 'Dynamic SVG Marker', icon: { url: 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(svg), scaledSize: new google.maps.Size(20, 20) }, optimized: false }); </script> </body> </html> 

अतिरिक्त जानकारी यहां पाई जा सकती है ।

बेस 64 एन्कोडिंग से बचें:

बेस 64 एन्कोडिंग से बचने के लिए आप 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(svg) 'data:image/svg+xml;charset=UTF-8,' + encodeURIComponent(svg) साथ 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(svg) प्रतिस्थापित कर सकते हैं 'data:image/svg+xml;charset=UTF-8,' + encodeURIComponent(svg)

यह IE9 में आधुनिक ब्राउज़रों के साथ काम करना चाहिए इसका फायदा यह है कि encodeURIComponent एक डिफ़ॉल्ट जेएस फ़ंक्शन है और सभी आधुनिक ब्राउज़र में उपलब्ध है। आप छोटे लिंक भी प्राप्त कर सकते हैं लेकिन आपको इसका परीक्षण करने की आवश्यकता है और अपने एसटीवीजी में ' बजाय ' का उपयोग करने पर विचार करें।

अतिरिक्त जानकारी के लिए डेटा यूआरआई में एसवीजी का अनुकूलन भी देखें।

आईई का समर्थन: एसवीजी मार्करों को आईई में समर्थन देने के लिए यहां दो छोटे एडैपमेंट्स की आवश्यकता होती है, जैसा कि यहां वर्णित है: IE में एसवीजी मार्कर । मैंने IE को समर्थन करने के लिए उदाहरण कोड अपडेट किया है

मुझे पता है कि यह पोस्ट थोड़ी पुरानी है, लेकिन मैंने इस पर इतनी बुरी जानकारी देखी है कि मैं चीख सकता था। इसलिए मैं सिर्फ मेरे दो सेंट को एक पूरी तरह से अलग दृष्टिकोण के साथ फेंकना चाहता हूं जो मुझे काम करता है, क्योंकि मैं इसे कई नक्शे पर विश्वसनीय तरीके से उपयोग करता हूं। इसके अलावा, मेरा मानना ​​है कि ओपी मैप बिंदु के चारों ओर तीर मार्कर को घुमाने की क्षमता चाहता था, जो अपने एक्स के चारों ओर के आइकन को घुमाएगी से अलग है, जो अक्षरे के नक्शे को इंगित करता है जहां तीर चिन्ह बदलता है।

सबसे पहले, याद रखें कि हम Google नक्शे और एसवीजी के साथ खेल रहे हैं, इसलिए हमें मार्करों (या वास्तव में प्रतीकों) के लिए एसवीजी के कार्यान्वयन के लिए जिस तरीके से Google परिनियोजित किया गया है उसे समायोजित करना चाहिए। Google एसवीजी मार्कर की छवि 0,0 पर अपने एंकर का सेट करता है जो कि एसवीजी व्यू बॉक्स के ऊपरी बाएं कोने में नहीं है। इस के आसपास पाने के लिए, आपको अपनी एसवीजी छवि को थोड़ा अलग ढंग से खींचना चाहिए ताकि Google को वह क्या चाहता है … हां का जवाब आपके एसवीजी संपादक (इलस्ट्रेटर, इनकस्केप आदि) में एसवीजी पथ बनाने में है। ।)।

पहला कदम, व्यू बॉक्स से छुटकारा पाने के लिए है। यह आपके एक्सएमएल को 0 में व्यू बॉक्स सेट करके किया जा सकता है … यह सही है, व्यू बॉक्स के लिए सामान्य चार तर्कों के बजाय सिर्फ एक शून्य। यह दृश्य बॉक्स को बंद करता है (और हाँ, यह शब्दार्थ सही है)। जब आप ऐसा करते हैं तो आप संभवतया अपनी छवि कूद के आकार को ध्यान में रखेंगे, और यही वजह है कि एसवीजी अब छवि को स्केल करने के लिए बेस (दृश्य बॉक्स) नहीं है इसलिए हम सीधे उस संदर्भ को चौड़ाई और ऊंचाई को वास्तविक पिक्सल तक सेट करके अपनी छवि को अपने एसवीजी संपादक के एक्सएमएल संपादक में रखना चाहते हैं।

एक्सएमएल संपादक में एसवीजी छवि की चौड़ाई और ऊंचाई निर्धारित करके आप छवि के स्केलिंग के लिए एक आधार रेखा बनाते हैं, और यह आकार डिफ़ॉल्ट रूप से मार्कर स्केल गुणों के लिए 1 का मान बन जाता है। आप मार्कर की गतिशील स्केलिंग के लिए इसका लाभ देख सकते हैं।

अब जब आप अपनी छवि का आकार लेते हैं, तो चित्र को तब तक ले जाएं जब तक कि आप जिस छवि को करना चाहते हैं, जब तक कि एंकर SVG संपादक के 0,0 निर्देशांक से अधिक नहीं हो। एक बार जब आप इस प्रतिलिपि को एसवीजी पथ के डी विशेषता के मूल्य में कर लेंगे। आप देखेंगे कि आधे संख्या में नकारार्थी हैं, जो व्यू बॉक्स की बजाय छवि के 0,0 के लिए आपके एंकर बिंदु को संरेखित करने का नतीजा है।

इस तकनीक का उपयोग करके आप मानचित्र पर अक्षांश और एलएनजी बिंदु के आसपास, सही ढंग से मार्कर को घुमाएंगे। यह एकमात्र विश्वसनीय तरीका है कि एसवीजी मार्कर के बिंदु को बाँध लें, जिसे आप मार्कर स्थान के अक्षांश और लंबी करना चाहते हैं।

मैंने इस के लिए जेएसएफडियल बनाने की कोशिश की, लेकिन वहां क्रियान्वयन में कुछ बग है, एक वजह यह है कि मैं पुन: संदर्भित कोड का इतना शौक नहीं हूं। इसलिए इसके बजाय, मैंने नीचे एक पूरी तरह से आत्मनिर्धारित उदाहरण शामिल किया है, जिसे आप एक संदर्भ के रूप में देखें, अनुकूलित और उपयोग कर सकते हैं। यह वही कोड है जो मैंने जेएसएफडल्ड पर असफल रहा, लेकिन यह फ़ायरबॉग के जरिए बिना किसी कट्टरपंथी के पास चला गया।

  <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="author" content="Drew G. Stimson, Sr. ( Epiphany )" /> <title>Create Draggable and Rotatable SVG Marker</title> <script src="http://maps.googleapis.com/maps/api/js?sensor=false"> </script> <style type="text/css"> #document_body { margin:0; border: 0; padding: 10px; font-family: Arial,sans-serif; font-size: 14px; font-weight: bold; color: #f0f9f9; text-align: center; text-shadow: 1px 1px 1px #000; background:#1f1f1f; } #map_canvas, #rotation_control { margin: 1px; border:1px solid #000; background:#444; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } #map_canvas { width: 100%; height: 360px; } #rotation_control { width: auto; padding:5px; } #rotation_value { margin: 1px; border:1px solid #999; width: 60px; padding:2px; font-weight: bold; color: #00cc00; text-align: center; background:#111; border-radius: 4px; } </style> <script type="text/javascript"> var map, arrow_marker, arrow_options; var map_center = {lat:41.0, lng:-103.0}; var arrow_icon = { path: 'M -1.1500216e-4,0 C 0.281648,0 0.547084,-0.13447 0.718801,-0.36481 l 17.093151,-22.89064 c 0.125766,-0.16746 0.188044,-0.36854 0.188044,-0.56899 0,-0.19797 -0.06107,-0.39532 -0.182601,-0.56215 -0.245484,-0.33555 -0.678404,-0.46068 -1.057513,-0.30629 l -11.318243,4.60303 0,-26.97635 C 5.441639,-47.58228 5.035926,-48 4.534681,-48 l -9.06959,0 c -0.501246,0 -0.906959,0.41772 -0.906959,0.9338 l 0,26.97635 -11.317637,-4.60303 c -0.379109,-0.15439 -0.812031,-0.0286 -1.057515,0.30629 -0.245483,0.33492 -0.244275,0.79809 0.0055,1.13114 L -0.718973,-0.36481 C -0.547255,-0.13509 -0.281818,0 -5.7002158e-5,0 Z', strokeColor: 'black', strokeOpacity: 1, strokeWeight: 1, fillColor: '#fefe99', fillOpacity: 1, rotation: 0, scale: 1.0 }; function init(){ map = new google.maps.Map(document.getElementById('map_canvas'), { center: map_center, zoom: 4, mapTypeId: google.maps.MapTypeId.HYBRID }); arrow_options = { position: map_center, icon: arrow_icon, clickable: false, draggable: true, crossOnDrag: true, visible: true, animation: 0, title: 'I am a Draggable-Rotatable Marker!' }; arrow_marker = new google.maps.Marker(arrow_options); arrow_marker.setMap(map); } function setRotation(){ var heading = parseInt(document.getElementById('rotation_value').value); if (isNaN(heading)) heading = 0; if (heading < 0) heading = 359; if (heading > 359) heading = 0; arrow_icon.rotation = heading; arrow_marker.setOptions({icon:arrow_icon}); document.getElementById('rotation_value').value = heading; } </script> </head> <body id="document_body" onload="init();"> <div id="rotation_control"> <small>Enter heading to rotate marker&nbsp;&nbsp;&nbsp;&nbsp;</small> Heading&deg;<input id="rotation_value" type="number" size="3" value="0" onchange="setRotation();" /> <small>&nbsp;&nbsp;&nbsp;&nbsp;Drag marker to place marker</small> </div> <div id="map_canvas"></div> </body> </html> 

यह वास्तव में Google के लिए करता है कि वह अपने स्वयं के कुछ प्रतीक मैप्स एपीआई के एसआईबीओएल कक्षा में उपलब्ध है, इसलिए यदि यह आपको समझा नहीं देता … वैसे भी, मुझे आशा है कि यह आपको सही ढंग से एसवीजी मार्कर बनाने और स्थापित करने में मदद करेगा आपके Google नक्शे समाप्त होते हैं

हाँ, आप आइकन के लिए एक .svg फ़ाइल का उपयोग कर सकते हैं जैसे कि आप .png या अन्य छवि फ़ाइल प्रारूप कर सकते हैं। बस उस आइकन के यूआरएल को निर्देशिका में सेट करें जहां .svg फ़ाइल स्थित है। उदाहरण के लिए:

 var icon = { url: 'path/to/images/car.svg', size: new google.maps.Size(sizeX, sizeY), origin: new google.maps.Point(0, 0), anchor: new google.maps.Point(sizeX/2, sizeY/2) }; var marker = new google.maps.Marker({ position: event.latLng, map: map, draggable: false, icon: icon }); 

चीजें बेहतर जा रही हैं, अभी आप एसवीजी फाइलों का उपयोग कर सकते हैं

  marker = new google.maps.Marker({ position: {lat: 36.720426, lng: -4.412573}, map: map, draggable: true, icon: "img/tree.svg" }); 

ठीक! मैंने अपने वेब पर जल्द ही ऐसा किया, मैं कस्टम Google मानचित्र मार्कर बनाने के दो तरीके कोशिश करता हूं, इस रन कोड का उपयोग करें canvg.js ब्राउज़र के लिए सबसे अच्छा संगतता है। टिप्पणी-आउट कोड IE11 का समर्थन नहीं करता है।

 var marker; var CustomShapeCoords = [16, 1.14, 21, 2.1, 25, 4.2, 28, 7.4, 30, 11.3, 30.6, 15.74, 25.85, 26.49, 21.02, 31.89, 15.92, 43.86, 10.92, 31.89, 5.9, 26.26, 1.4, 15.74, 2.1, 11.3, 4, 7.4, 7.1, 4.2, 11, 2.1, 16, 1.14]; function initMap() { var map = new google.maps.Map(document.getElementById('map'), { zoom: 13, center: { lat: 59.325, lng: 18.070 } }); var markerOption = { latitude: 59.327, longitude: 18.067, color: "#" + "000", text: "ha" }; marker = createMarker(markerOption); marker.setMap(map); marker.addListener('click', changeColorAndText); }; function changeColorAndText() { var iconTmpObj = createSvgIcon( "#c00", "ok" ); marker.setOptions( { icon: iconTmpObj } ); }; function createMarker(options) { //IE MarkerShape has problem var markerObj = new google.maps.Marker({ icon: createSvgIcon(options.color, options.text), position: { lat: parseFloat(options.latitude), lng: parseFloat(options.longitude) }, draggable: false, visible: true, zIndex: 10, shape: { coords: CustomShapeCoords, type: 'poly' } }); return markerObj; }; function createSvgIcon(color, text) { var div = $("<div></div>"); var svg = $( '<svg width="32px" height="43px" viewBox="0 0 32 43" xmlns="http://www.w3.org/2000/svg">' + '<path style="fill:#FFFFFF;stroke:#020202;stroke-width:1;stroke-miterlimit:10;" d="M30.6,15.737c0-8.075-6.55-14.6-14.6-14.6c-8.075,0-14.601,6.55-14.601,14.6c0,4.149,1.726,7.875,4.5,10.524c1.8,1.801,4.175,4.301,5.025,5.625c1.75,2.726,5,11.976,5,11.976s3.325-9.25,5.1-11.976c0.825-1.274,3.05-3.6,4.825-5.399C28.774,23.813,30.6,20.012,30.6,15.737z"/>' + '<circle style="fill:' + color + ';" cx="16" cy="16" r="11"/>' + '<text x="16" y="20" text-anchor="middle" style="font-size:10px;fill:#FFFFFF;">' + text + '</text>' + '</svg>' ); div.append(svg); var dd = $("<canvas height='50px' width='50px'></cancas>"); var svgHtml = div[0].innerHTML; canvg(dd[0], svgHtml); var imgSrc = dd[0].toDataURL("image/png"); //"scaledSize" and "optimized: false" together seems did the tricky ---IE11 && viewBox influent IE scaledSize //var svg = '<svg width="32px" height="43px" viewBox="0 0 32 43" xmlns="http://www.w3.org/2000/svg">' // + '<path style="fill:#FFFFFF;stroke:#020202;stroke-width:1;stroke-miterlimit:10;" d="M30.6,15.737c0-8.075-6.55-14.6-14.6-14.6c-8.075,0-14.601,6.55-14.601,14.6c0,4.149,1.726,7.875,4.5,10.524c1.8,1.801,4.175,4.301,5.025,5.625c1.75,2.726,5,11.976,5,11.976s3.325-9.25,5.1-11.976c0.825-1.274,3.05-3.6,4.825-5.399C28.774,23.813,30.6,20.012,30.6,15.737z"/>' // + '<circle style="fill:' + color + ';" cx="16" cy="16" r="11"/>' // + '<text x="16" y="20" text-anchor="middle" style="font-size:10px;fill:#FFFFFF;">' + text + '</text>' // + '</svg>'; //var imgSrc = 'data:image/svg+xml;charset=UTF-8,' + encodeURIComponent(svg); var iconObj = { size: new google.maps.Size(32, 43), url: imgSrc, scaledSize: new google.maps.Size(32, 43) }; return iconObj; }; 
 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Your Custom Marker </title> <style> /* Always set the map height explicitly to define the size of the div * element that contains the map. */ #map { height: 100%; } /* Optional: Makes the sample page fill the window. */ html, body { height: 100%; margin: 0; padding: 0; } </style> </head> <body> <div id="map"></div> <script src="https://canvg.github.io/canvg/canvg.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script async defer src="https://maps.googleapis.com/maps/api/js?callback=initMap"></script> </body> </html> 

जैसा कि इस धागे में दूसरों द्वारा उल्लिखित है, स्पष्ट रूप से एसटीवी की चौड़ाई और ऊंचाई विशेषताओं को सेट करना भूलना नहीं है:

 <svg id="some_id" data-name="some_name" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 26 42" width="26px" height="42px"> 

अगर आप ऐसा नहीं करते हैं तो कोई जेएस हेरफेर आपकी सहायता कर सकता है क्योंकि ग्राम के संदर्भ में कोई फ़्रेम नहीं होगा और हमेशा एक मानक आकार का उपयोग करें

(मुझे पता है कि कुछ टिप्पणियों में इसका उल्लेख किया गया है, लेकिन उन्हें याद करना आसान है। यह जानकारी विभिन्न मामलों में मेरी मदद करती है)

आपको optimized: false

उदाहरण के लिए

 var img = { url: 'img/puff.svg', scaledSide: new google.maps.Size(5, 5) }; new google.maps.Marker({position: this.mapOptions.center, map: this.map, icon: img, optimized: false,}); 

optimized: false न होने के बिना optimized: false , मेरे एसटीवी एक स्थैतिक छवि के रूप में दिखाई दिया।