Google मानचित्र API v3 में SVG मार्कर का उपयोग कैसे करें


91

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


1
इस तरह के प्रश्न की खोज करने वालों के लिए: आंशिक आंशिक IE 9+ संगत समाधान यहां: stackoverflow.com/a/30890373/634386 कैनवास पर के बजाय DOM में SVG लगाएगा ताकि आप CSS3 के साथ हेरफेर कर सकें (यदि आप) फिर से उस तत्व को विशेष रूप से मक्खी पर घुमाना)।
माइक कोरमेन्डी

जवाबों:


144

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

अधिक जानकारी के लिए 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
});

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

JSFiddle डेमो

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

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

JSFiddle डेमो

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

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

JSFiddle डेमो


, यह कार svg बनाने के लिए बहुत मुश्किल है।
jemz

क्या आपके पास उस कार की एसवीजी छवि है जो आप चाहते हैं? फिर बस एक पाठ संपादक के साथ इसे खोलें और इसमें पथ ढूंढें!
मृदुपिडाउन

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

1
इस वर्ष मैंने जो सबसे उपयोगी चीजें पढ़ीं, उनमें से एक थी! बहुत धन्यवाद
जोनाथन La'Fey

2
@MrUpsidown लेकिन निश्चित रूप से एसवीजी नक्शे के बाहर ठीक काम कर रहा है - वहाँ कभी कोई समस्या नहीं थी। यह उनके कैनवास रेंडरिंग में एसवीजी के लिए Google के समर्थन में एक गड़बड़ के साथ करना है - जिसे बंद किया जा सकता है ताकि एसवीजी को डोम में डाला जाए। फिर मार्करों की गणना के आकार के साथ समस्या है, जो मानचित्र मार्करों के कार्यान्वयन में कुछ गुण हैं जो आकार को बाध्य कर सकते हैं। मुझे यहां एक आंशिक समाधान मिला है: stackoverflow.com/a/30890373/634386
माइक मॉर्मेंडी ...

68

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

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);

जावास्क्रिप्ट (फ़ायरफ़ॉक्स) btoa () का उपयोग SVG टेक्स्ट से बेस 64 एनकोडिंग प्राप्त करने के लिए किया जाता है। आधार डेटा URL जनरेट करने के लिए आपका 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>

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

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

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

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

अतिरिक्त जानकारी के लिए डेटा URI में SVG ऑप्टिमाइज़ करना भी देखें ।

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


3
अच्छी जानकारी, लेकिन त्वरित ध्यान दें कि बेस 64 एनकोडिंग वास्तव में आवश्यक या वांछनीय नहीं है। आप इसके बजाय डेटा URI में सीधे svg एन्कोडिंग का उपयोग कर सकते हैं, जैसे data:image/svg+xml;utf8,। और जानकारी: css-tricks.com/probably-dont-base64-svg
जोश Qaribou से

यदि आप बेस 64 एनकोडिंग से बच सकते हैं तो आप सही हैं। आपने यह कैसे किया कि आप एक उदाहरण प्रदान कर सकें? अगर मैं सिर्फ यूआरआई में svg कोड जोड़ता हूं तो यह कुछ चार्ट के साथ काम नहीं करता है जैसे #आपने URL एन्कोडिंग का उपयोग किया था?
टॉम

मैं उल्लेख करना चाहिए यह utf8 एन्कोडेड है; svg प्रारूप है। दिए गए लिंक के कई उदाहरण हैं।
Qaribou से जोश

1
इस का उपयोग करके घुमाएँ svg छवि का उपयोग कैसे करें?
सोमनाथ खरात

क्या हम सभी IE से प्यार नहीं करते?) हमेशा की तरह इसे सभी ब्राउज़रों पर काम करने के लिए कुछ अतिरिक्त काम करने की आवश्यकता होती है। मैंने IE का समर्थन करने के लिए उदाहरण को अनुकूलित किया, आशा है कि यह मदद करता है।
टॉम

30

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

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

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

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

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

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

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

    <!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 इसके लिए मैप्स एपीआई के SYMBOL वर्ग में उपलब्ध कुछ प्रतीकों के लिए स्वयं करता है, इसलिए यदि यह आपको मना नहीं करता है ... वैसे भी, मुझे आशा है कि यह आपको सही ढंग से एसवीजी मार्कर बनाने और स्थापित करने में मदद करेगा। आपके Google मानचित्र एंडेवोर्स हैं।


2
अच्छा जवाब, मैंने लोगों के लिए jsfiddle.net/v2pjfp7r
Rob Schmuecker

"<3" यह आवश्यक जानकारी है जो Google प्रलेखन का हिस्सा होना चाहिए।
user7653815

12

हां, आप आइकन के लिए .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
});

1
आपके द्वारा दिखाया जा रहा आइकन ऑब्जेक्ट एक मानक मार्कर के लिए है, एसवीजी मार्कर नहीं। एक svg मार्कर प्रतीक वर्ग के गुणों का उपयोग करता है, जिन्हें तब मार्कर वर्ग के आइकन गुण के रूप में असाइन किया जाता है। (एक सही संदर्भ के लिए MrUpsidown आइकन ऑब्जेक्ट देखें ...)
एपिफेनी

2
यह भी टूट जाएगा यदि एसवीजी में एक से अधिक 'डी' पथ है (आमतौर पर एसवीजी छवि में एक से अधिक परत के साथ जुड़ा हुआ है)।
एपिफेनी

2
ध्यान दें कि आपकी svg फ़ाइल को स्पष्ट रूप से आइकन के आयामों को इस तरह सेट करना चाहिए: width="33px" height="50px"- देखें stackoverflow.com/a/21783089/165673
यारिन

10

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

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

1
रोटेशन की अनुमति नहीं देता
मैट वेस्टलेक

5

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

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

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

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


1

ठीक है! मैंने इसे अपने वेब में जल्द ही कर दिया, मैं कस्टम गूगल मैप मार्कर बनाने के दो तरीके आज़माता हूं, यह रन कोड उपयोग 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>


-4

आपको पास होने की जरूरत है 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, मेरा svg एक स्थिर छवि के रूप में दिखाई दिया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.