Google Maps API 3 - สีของตัวทำเครื่องหมายที่กำหนดเองสำหรับเครื่องหมาย (จุด) เริ่มต้น


282

ผมเคยเห็นจำนวนมากคำถามอื่น ๆ ที่คล้ายกันนี้ ( ที่นี่ , ที่นี่และที่นี่ ) แต่พวกเขาทั้งหมดได้รับการยอมรับคำตอบที่ไม่ได้แก้ปัญหาของฉัน ทางออกที่ดีที่สุดที่ฉันพบกับปัญหาคือไลบรารีStyledMarkerซึ่งช่วยให้คุณกำหนดสีที่กำหนดเองสำหรับเครื่องหมาย แต่ฉันไม่สามารถใช้เครื่องหมายเริ่มต้น (สีที่คุณได้รับเมื่อคุณค้นหาด้วย Google แผนที่) จุดที่อยู่ตรงกลาง) ดูเหมือนว่าจะมีเครื่องหมายในจดหมายหรือมีไอคอนพิเศษ

คำตอบ:


533

คุณสามารถขอภาพไอคอนแบบไดนามิกจากGoogle ชาร์ต APIด้วย URL:

http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=%E2%80%A2|FE7569

ซึ่งมีลักษณะดังนี้: สีเริ่มต้นภาพเป็น21x34พิกเซลและส่วนปลายของพินอยู่ที่ตำแหน่ง(10, 34)

และคุณยังต้องการภาพเงาแยกต่างหาก (เพื่อไม่ให้ซ้อนทับไอคอนใกล้เคียง):

http://chart.apis.google.com/chart?chst=d_map_pin_shadow

ซึ่งมีลักษณะดังนี้: ป้อนคำอธิบายรูปภาพที่นี่รูปภาพมีขนาด40x37พิกเซลและส่วนปลายของพินอยู่ที่ตำแหน่ง(12, 35)

เมื่อคุณสร้างMarkerImageคุณต้องกำหนดขนาดและจุดยึดตาม:

    var pinColor = "FE7569";
    var pinImage = new google.maps.MarkerImage("http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=%E2%80%A2|" + pinColor,
        new google.maps.Size(21, 34),
        new google.maps.Point(0,0),
        new google.maps.Point(10, 34));
    var pinShadow = new google.maps.MarkerImage("http://chart.apis.google.com/chart?chst=d_map_pin_shadow",
        new google.maps.Size(40, 37),
        new google.maps.Point(0, 0),
        new google.maps.Point(12, 35));

จากนั้นคุณสามารถเพิ่มเครื่องหมายลงในแผนที่ของคุณด้วย:

        var marker = new google.maps.Marker({
                position: new google.maps.LatLng(0,0), 
                map: map,
                icon: pinImage,
                shadow: pinShadow
            });

เพียงแทนที่ "FE7569" ด้วยรหัสสีที่คุณต้องการ เช่น:สีเริ่มต้นสีเขียวสีเหลือง

เครดิตเนื่องจากJack B Nimbleสำหรับแรงบันดาลใจ;)


36
ในขณะที่ฉันชอบคำตอบนี้จริง ๆ แล้ว Google charts API ที่เกี่ยวกับInfographics (ลิงก์ที่คุณให้ไว้ด้านบน) นั้นเลิกใช้แล้ว
johnt Entrepreneur

3
ไม่แน่ใจว่าเป็นของใหม่หรือไม่ แต่คุณสามารถเพิ่ม _withshadow เพื่อให้มีเงาในตัวโดยอัตโนมัติ ตัวอย่างchart.apis.google.com/…
Lionel Chan

@LionelChan คุณทำได้ แต่มันไม่เข้ากันเลยและมันก็จะทับซ้อนกับไอคอนอื่น ๆ คุณต้องการตรวจสอบให้แน่ใจว่ามีการลากเงาทั้งหมดออกก่อนที่จะมีพิน
ด้านไหม้เมื่อ

1
@ แมทเบิร์นดีอาจเป็นวิธีแก้ปัญหาที่ง่ายกว่าสำหรับบางคนทำไมไม่;)
ไลโอเนลชาน

1
วิธีการสร้างเครื่องหมายนี้เลิกใช้แล้วเมื่อวันที่ 14 มีนาคม 2562 มันจะไม่ทำงานอีกต่อไป: error502
Jonny

372

หากคุณใช้ Google Maps API v3 คุณสามารถใช้setIconเช่น

marker.setIcon('http://maps.google.com/mapfiles/ms/icons/green-dot.png')

หรือเป็นส่วนหนึ่งของเครื่องหมายเริ่มต้น:

marker = new google.maps.Marker({
    icon: 'http://...'
});

สีอื่น ๆ :

ใช้รหัสต่อไปนี้เพื่ออัปเดตเครื่องหมายเริ่มต้นด้วยสีที่ต่างกัน

(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ROSE)

50
มันยอดเยี่ยมมาก หากคุณต้องการไอคอนเพิ่มเติมและตัวเลือกสีคุณสามารถค้นหาได้ที่นี่: sites.google.com/site/gmapsdevelopment
Johnny Oshika

121

นี่เป็นวิธีแก้ปัญหาที่ดีในการใช้ Gooogle Maps API ไม่มีบริการภายนอกไม่มีห้องสมุดเพิ่มเติม และช่วยให้รูปร่างที่กำหนดเองและหลายสีและสไตล์ วิธีการแก้ปัญหาใช้เครื่องหมายเวกเตอร์ซึ่ง googlemaps api เรียกสัญลักษณ์สัญลักษณ์

นอกจากสัญลักษณ์ที่กำหนดไว้ล่วงหน้าจำนวนน้อยและ จำกัด คุณสามารถสร้างรูปทรงของสีใดก็ได้โดยระบุสตริงเส้นทาง SVG ( Spec )

หากต้องการใช้งานแทนที่จะตั้งค่าตัวเลือกเครื่องหมาย 'ไอคอน' เป็น URL ของรูปภาพคุณต้องตั้งค่าเป็นพจนานุกรมที่มีตัวเลือกสัญลักษณ์ ตัวอย่างเช่นฉันจัดการเพื่อสร้างหนึ่งสัญลักษณ์ที่ค่อนข้างคล้ายกับเครื่องหมายมาตรฐาน:

function pinSymbol(color) {
    return {
        path: 'M 0,0 C -2,-20 -10,-22 -10,-30 A 10,10 0 1,1 10,-30 C 10,-22 2,-20 0,0 z M -2,-30 a 2,2 0 1,1 4,0 2,2 0 1,1 -4,0',
        fillColor: color,
        fillOpacity: 1,
        strokeColor: '#000',
        strokeWeight: 2,
        scale: 1,
   };
}

var marker = new google.maps.Marker({
   map: map,
   position: new google.maps.LatLng(latitude, longitude),
   icon: pinSymbol("#FFF"),
});

เครื่องหมายเวกเตอร์

ฉันคุณระมัดระวังที่จะรักษาจุดสำคัญรูปร่างไว้ที่ 0,0 คุณหลีกเลี่ยงการกำหนดไอคอนเครื่องหมายเครื่องหมายตรงกลางพารามิเตอร์ ตัวอย่างเส้นทางอื่นเครื่องหมายเดียวกันโดยไม่มีจุด:

    path: 'M 0,0 C -2,-20 -10,-22 -10,-30 A 10,10 0 1,1 10,-30 C 10,-22 2,-20 0,0 z',

เครื่องหมายไร้จุดเวกเตอร์

และที่นี่คุณมีธงที่เรียบง่ายและมีสีน่าเกลียด

    path: 'M 0,0 -1,-2 V -43 H 1 V -2 z M 1,-40 H 30 V -20 H 1 z',

ธงเวกเตอร์

คุณยังสามารถสร้างพา ธ โดยใช้เครื่องมือเสมือนเช่นInkscape (GNU-GPL, มัลติแพล็ตฟอร์ม) คำแนะนำที่เป็นประโยชน์บางประการ:

  • Google API เพียงยอมรับเส้นทางเดียวดังนั้นคุณต้องเปลี่ยนวัตถุอื่น (สี่เหลี่ยมจัตุรัส, เซอร์เคิล ... ) เป็นเส้นทางและเข้าร่วมเป็นหนึ่งเดียว ทั้งสองคำสั่งที่เมนู Path
  • ในการย้ายพา ธ ไปที่ (0,0) ให้ไปที่โหมดแก้ไขเส้นทาง (F2) เลือกโหนดควบคุมทั้งหมดแล้วลากไป การย้ายวัตถุด้วย F1 จะไม่เปลี่ยนเส้นทางของโหนด
  • เพื่อให้มั่นใจว่าจุดอ้างอิงอยู่ที่ (0,0) คุณสามารถเลือกได้คนเดียวและแก้ไข coords ด้วยมือบนแถบเครื่องมือด้านบน
  • หลังจากบันทึกไฟล์ SVG ซึ่งเป็น XML ให้เปิดด้วยโปรแกรมแก้ไขมองหาองค์ประกอบ svg: path และคัดลอกเนื้อหาของแอตทริบิวต์ 'd'

4
นี่เป็นคำตอบที่ดี หากใครบางคนสามารถสร้างเส้นทางที่ดูเหมือนหมุดจริงนี่จะเป็นคำตอบที่ดี
mkoryak

2
โซลูชันนี้ดีกว่าการโหลดภาพพินจาก URL เพราะถ้าคุณมีหมุดหลายอันในแผนที่เดียวมันจะเพิ่มเวลาในการโหลดแผนที่
Ahsan

1
@mkoryak ฉันได้เพิ่มคำแนะนำบางอย่างเกี่ยวกับวิธีการวาดเส้นทางเหล่านั้นด้วยตัวคุณเองด้วยเครื่องมือกราฟิกเช่น inkscape หากคุณต้องการจับคู่ PNG ที่มีอยู่เพียงนำเข้าสู่ inkscape และใช้เป็นข้อมูลอ้างอิงสำหรับเส้นทาง
vokimon

หนึ่งสามารถใส่บางสิ่งบางอย่างในบอลลูนอื่นที่ไม่ใช่จุด?
Ross Rogers

1
คุณวาดมัน ข้อเสียเปรียบเพียงอย่างเดียวคือพินและจุดควรเป็นเส้นทางเดียวกัน นั่นหมายความว่าจุดไม่ใช่จุด แต่เป็นรู ไม่ว่าคุณจะใช้รูปร่างแบบใดจุดจะเป็นรูในรูปร่างของพินที่มีรูปร่างนั้น (คุณเห็นผ่านมัน) มันจะเป็นการดีที่ได้รวมรูปร่างหลายสีเข้ากับสีที่แตกต่างกัน
vokimon

14

ดีสิ่งที่อยู่ใกล้ฉันได้รับสามารถที่จะได้รับกับ StyledMarker เป็นนี้

กระสุนที่อยู่ตรงกลางนั้นค่อนข้างไม่ใหญ่เท่าค่าเริ่มต้น ชั้น StyledMarker เพียงแค่สร้าง URL นี้และถาม API ของ Google ในการสร้างเครื่องหมาย

จากการใช้งานตัวอย่างเช่นระดับการใช้งาน"% E2% 80% A2"เป็นข้อความของคุณในขณะที่:

var styleMaker2 = new StyledMarker({styleIcon:new StyledIcon(StyledIconTypes.MARKER,{text:"%E2%80%A2"},styleIconClass),position:new google.maps.LatLng(37.263477473067, -121.880502070713),map:map});

คุณจะต้องดัดแปลงแก้ไข StyledMarker.js เพื่อแสดงความคิดเห็นบรรทัด:

  if (text_) {
    text_ = text_.substr(0,2);
  }

เช่นนี้จะตัดสตริงข้อความถึง 2 ตัวอักษร

อีกทางหนึ่งคุณสามารถสร้างภาพเครื่องหมายที่กำหนดเองตามสีเริ่มต้นด้วยสีที่คุณต้องการและแทนที่เครื่องหมายเริ่มต้นด้วยรหัสเช่นนี้:

marker = new google.maps.Marker({
  map:map,
  position: latlng,
  icon: new google.maps.MarkerImage(
    'http://www.gettyicons.com/free-icons/108/gis-gps/png/24/needle_left_yellow_2_24.png',
    new google.maps.Size(24, 24),
    new google.maps.Point(0, 0),
    new google.maps.Point(0, 24)
  )
});

ขอบคุณสำหรับการตอบกลับ แต่ฉันได้ลองสร้างจุดใหม่โดยใช้อักขระ ascii แล้ว แต่คุณไม่สามารถทำให้มันเหมือนเดิมได้และฉันไม่ต้องการที่จะจัดการกับสิ่งที่แตกต่างอย่างเห็นได้ชัด - มันดูไม่เป็นมืออาชีพจริงๆ และใช่ภาพเครื่องหมายที่กำหนดเองได้รับการแก้ไขปัจจุบันของฉัน (ฉันคว้าหมุดสีแดงเริ่มต้นจากที่นี่: maps.google.com/intl/th_us/mapfiles/ms/micons/red-dot.pngซึ่งฉันเปิดใน GIMP และใช้ เครื่องมือ colourise) แต่ก็ไม่สมบูรณ์แบบเช่นกัน
jackocnr

ฉันยอมรับคำตอบนี้เนื่องจากเป็นคำตอบเดียวและฉันคิดว่าไม่มีวิธีอื่น
jackocnr

ขออภัยฉันไม่สามารถช่วยเหลือได้มากขึ้น บางครั้งคำตอบเดียวคือคำตอบที่ต้องการน้อยกว่า
Jack B Nimble

12

ฉันได้ขยายคำตอบของ vokimonไปเล็กน้อยทำให้สะดวกขึ้นสำหรับการเปลี่ยนคุณสมบัติอื่นเช่นกัน

function customIcon (opts) {
  return Object.assign({
    path: 'M 0,0 C -2,-20 -10,-22 -10,-30 A 10,10 0 1,1 10,-30 C 10,-22 2,-20 0,0 z M -2,-30 a 2,2 0 1,1 4,0 2,2 0 1,1 -4,0',
    fillColor: '#34495e',
    fillOpacity: 1,
    strokeColor: '#000',
    strokeWeight: 2,
    scale: 1,
  }, opts);
}

การใช้งาน:

marker.setIcon(customIcon({
  fillColor: '#fff',
  strokeColor: '#000'
}));

หรือเมื่อกำหนดเครื่องหมายใหม่:

const marker = new google.maps.Marker({
  position: {
    lat: ...,
    lng: ...
  },
  icon: customIcon({
    fillColor: '#2ecc71'
  }),
  map: map
});

11

สวัสดีคุณสามารถใช้ไอคอนเป็น SVG และตั้งค่าสี ดูรหัสนี้

/*
 * declare map and places as a global variable
 */
var map;
var places = [
    ['Place 1', "<h1>Title 1</h1>", -0.690542, -76.174856,"red"],
    ['Place 2', "<h1>Title 2</h1>", -5.028249, -57.659052,"blue"],
    ['Place 3', "<h1>Title 3</h1>", -0.028249, -77.757507,"green"],
    ['Place 4', "<h1>Title 4</h1>", -0.800101286, -76.78747820,"orange"],
    ['Place 5', "<h1>Title 5</h1>", -0.950198, -78.959302,"#FF33AA"]
];
/*
 * use google maps api built-in mechanism to attach dom events
 */
google.maps.event.addDomListener(window, "load", function () {

    /*
     * create map
     */
    var map = new google.maps.Map(document.getElementById("map_div"), {
        mapTypeId: google.maps.MapTypeId.ROADMAP,
    });

    /*
     * create infowindow (which will be used by markers)
     */
    var infoWindow = new google.maps.InfoWindow();
    /*
     * create bounds (which will be used auto zoom map)
     */
    var bounds = new google.maps.LatLngBounds();

    /*
     * marker creater function (acts as a closure for html parameter)
     */
    function createMarker(options, html) {
        var marker = new google.maps.Marker(options);
        bounds.extend(options.position);
        if (html) {
            google.maps.event.addListener(marker, "click", function () {
                infoWindow.setContent(html);
                infoWindow.open(options.map, this);
                map.setZoom(map.getZoom() + 1)
                map.setCenter(marker.getPosition());
            });
        }
        return marker;
    }

    /*
     * add markers to map
     */
    for (var i = 0; i < places.length; i++) {
        var point = places[i];
        createMarker({
            position: new google.maps.LatLng(point[2], point[3]),
            map: map,
            icon: {
                path: "M27.648 -41.399q0 -3.816 -2.7 -6.516t-6.516 -2.7 -6.516 2.7 -2.7 6.516 2.7 6.516 6.516 2.7 6.516 -2.7 2.7 -6.516zm9.216 0q0 3.924 -1.188 6.444l-13.104 27.864q-0.576 1.188 -1.71 1.872t-2.43 0.684 -2.43 -0.684 -1.674 -1.872l-13.14 -27.864q-1.188 -2.52 -1.188 -6.444 0 -7.632 5.4 -13.032t13.032 -5.4 13.032 5.4 5.4 13.032z",
                scale: 0.6,
                strokeWeight: 0.2,
                strokeColor: 'black',
                strokeOpacity: 1,
                fillColor: point[4],
                fillOpacity: 0.85,
            },
        }, point[1]);
    };
    map.fitBounds(bounds);
});
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?v=3"></script>
<div id="map_div" style="height: 400px;"></div>


6

ตั้งแต่เวอร์ชัน 3.11 ของ Google Maps API Iconวัตถุจะมาแทนที่MarkerImageแทนที่วัตถุไอคอนรองรับพารามิเตอร์เดียวกับ MarkerImage ฉันยังพบว่ามันจะตรงไปข้างหน้าอีกเล็กน้อย

ตัวอย่างอาจมีลักษณะเช่นนี้:

var image = {
  url: place.icon,
  size: new google.maps.Size(71, 71),
  origin: new google.maps.Point(0, 0),
  anchor: new google.maps.Point(17, 34),
  scaledSize: new google.maps.Size(25, 25)
};

สำหรับข้อมูลเพิ่มเติมตรวจสอบเว็บไซต์นี้


1
ไม่ใช่คำตอบสำหรับคำถามนี้ควรเป็นความเห็น
mkoryak

4

ในInternet Explorer , การแก้ปัญหานี้ไม่ทำงานใน SSL

หนึ่งสามารถดูข้อผิดพลาดในคอนโซลเป็น:

SEC7111 : https การรักษาความปลอดภัยที่ถูกบุกรุกโดยนี้ ,

วิธีแก้ปัญหา : ในฐานะหนึ่งในผู้ใช้ที่นี่แนะนำให้แทนที่ chart.apis.google.comเป็นchart.googleapis.comเพื่อหาเส้นทาง URL เพื่อหลีกเลี่ยงข้อผิดพลาด SSL


3

อย่างที่คนอื่น ๆ พูดถึงคำตอบของ vokimonนั้นยอดเยี่ยม แต่น่าเสียดายที่ Google Maps นั้นค่อนข้างช้าเมื่อมีเครื่องหมายที่ใช้ SymbolPath / SVG หลายตัวพร้อมกัน

ดูเหมือนว่าการใช้ Data URI นั้นเร็วกว่ามากเมื่อเทียบกับ PNG

นอกจากนี้เนื่องจากเป็นเอกสาร SVG ฉบับสมบูรณ์จึงเป็นไปได้ที่จะใช้วงกลมที่เหมาะสมสำหรับจุด พา ธ ถูกแก้ไขดังนั้นจึงไม่ได้ชดเชยกับด้านซ้ายบนอีกต่อไปดังนั้นจำเป็นต้องกำหนดจุดยึด

ต่อไปนี้เป็นเวอร์ชันดัดแปลงที่สร้างเครื่องหมายเหล่านี้:

var coloredMarkerDef = {
    svg: [
        '<svg viewBox="0 0 22 41" width="22px" height="41px" xmlns="http://www.w3.org/2000/svg">',
            '<path d="M 11,41 c -2,-20 -10,-22 -10,-30 a 10,10 0 1 1 20,0 c 0,8 -8,10 -10,30 z" fill="{fillColor}" stroke="#ffffff" stroke-width="1.5"/>',
            '<circle cx="11" cy="11" r="3"/>',
        '</svg>'
    ].join(''),
    anchor: {x: 11, y: 41},
    size: {width: 22, height: 41}
};

var getColoredMarkerSvg = function(color) {
    return coloredMarkerDef.svg.replace('{fillColor}', color);
};

var getColoredMarkerUri = function(color) {
    return 'data:image/svg+xml,' + encodeURIComponent(getColoredMarkerSvg(color));
};

var getColoredMarkerIcon = function(color) {
    return {
        url: getColoredMarkerUri(color),
        anchor: coloredMarkerDef.anchor,
        size: coloredMarkerDef.size,
        scaledSize: coloredMarkerDef.size
    }
};

การใช้งาน:

var marker = new google.maps.Marker({
    map: map,
    position: new google.maps.LatLng(latitude, longitude),
    icon: getColoredMarkerIcon("#FFF")
});

ข้อเสียเช่นเดียวกับภาพ PNG คือสี่เหลี่ยมทั้งหมดสามารถคลิกได้ ในทางทฤษฎีแล้วมันไม่ยากเกินไปที่จะติดตามเส้นทาง SVGและสร้างรูปหลายเหลี่ยมMarkerShape


2

คุณสามารถใช้รหัสนี้ใช้งานได้ดี

 var pinImage = new google.maps.MarkerImage("http://www.googlemapsmarkers.com/v1/009900/");<br>

 var marker = new google.maps.Marker({
            position: yourlatlong,
            icon: pinImage,
            map: map
        });

2

รวมเครื่องหมายตามสัญลักษณ์ที่มีเส้นทางวาดโครงร่างด้วยอักขระ '●' สำหรับกึ่งกลาง คุณสามารถแทนที่จุดด้วยข้อความอื่น ('A', 'B' ฯลฯ ) ได้ตามต้องการ

ฟังก์ชั่นนี้จะส่งกลับตัวเลือกสำหรับเครื่องหมายที่มีข้อความที่กำหนด (ถ้ามี) สีข้อความและสีเติม มันใช้สีข้อความสำหรับโครงร่าง

function createSymbolMarkerOptions(text, textColor, fillColor) {
    return {
        icon: {
            path: 'M 0,0 C -2,-20 -10,-22 -10,-30 A 10,10 0 1,1 10,-30 C 10,-22 2,-20 0,0 z',
            fillColor: fillColor,
            fillOpacity: 1,
            strokeColor: textColor,
            strokeWeight: 1.8,
            labelOrigin: { x: 0, y: -30 }
        },
        label: {
            text: text || '●',
            color: textColor
        }
    };
}

1

ฉันลองสองวิธีในการสร้าง google map marker ที่กำหนดเองรหัสการทำงานที่ใช้ 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;

  //todo yao gai bu dui
  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>


1

ฉันพยายามเป็นเวลานานในการปรับปรุงเครื่องหมายวาดของ vokimon และทำให้มันคล้ายกับ Google แผนที่หนึ่ง (และประสบความสำเร็จมาก) นี่คือรหัสที่ฉันได้รับ:

let circle=true;

path = 'M 0,0  C -0.7,-9 -3,-14 -5.5,-18.5 '+   
'A 16,16 0 0,1 -11,-29 '+  
'A 11,11 0 1,1 11,-29 '+  
'A 16,16 0 0,1 5.5,-18.5 '+  
'C 3,-14 0.7,-9 0,0 z '+  
['', 'M -2,-28 '+  
'a 2,2 0 1,1 4,0 2,2 0 1,1 -4,0'][new Number(circle)];   

ฉันยังลดขนาดมันลง 0.8



0

การใช้ swift และ Google Maps Api v3 นี่เป็นวิธีที่ง่ายที่สุดที่ฉันสามารถทำได้:

icon = GMSMarker.markerImageWithColor(UIColor.blackColor())

หวังว่าจะช่วยใครบางคน


0

เหล่านี้เป็นเครื่องหมายวงกลมที่กำหนดเอง

small_red:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAiklEQVR42mNgQIAoIF4NxGegdCCSHAMzEC+NUlH5v9rF5f+ZoCAwHaig8B8oPhOmKC1NU/P//7Q0DByrqgpSGAtSdOCAry9WRXt9fECK9oIUPXwYFYVV0e2ICJCi20SbFAuyG5uiECUlkKIQmOPng3y30d0d7Lt1bm4w301jQAOgcNoIDad1yOEEAFm9fSv/VqtJAAAAAElFTkSuQmCC

small_yellow:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAi0lEQVR42mNgQIAoIF4NxGegdCCSHAMzEC+NijL7v3p1+v8zZ6rAdGCg4X+g+EyYorS0NNv////PxMCxsRYghbEgRQcOHCjGqmjv3kKQor0gRQ8fPmzHquj27WaQottEmxQLshubopAQI5CiEJjj54N8t3FjFth369ZlwHw3jQENgMJpIzSc1iGHEwB8p5qDBbsHtAAAAABJRU5ErkJggg==

small_green:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAiElEQVR42mNgQIAoIF4NxGegdCCSHAMzEC81izL7n746/X/VmSowbRho+B8oPhOmKM02zfb/TCzQItYCpDAWpOhA8YFirIoK9xaCFO0FKXrY/rAdq6Lm280gRbeJNikWZDc2RUYhRiBFITDHzwf5LmtjFth3GesyYL6bxoAGQOG0ERpO65DDCQDX7ovT++K9KQAAAABJRU5ErkJggg==

small_blue:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAiklEQVR42mNgQIAoIF4NxGegdCCSHAMzEC81M4v6n56++n9V1RkwbWgY+B8oPhOmKM3WNu3/zJn/MbCFRSxIYSxI0YHi4gNYFRUW7gUp2gtS9LC9/SFWRc3Nt0GKbhNtUizIbmyKjIxCQIpCYI6fD/JdVtZGsO8yMtbBfDeNAQ2AwmkjNJzWIYcTAMk+i9OhipcQAAAAAElFTkSuQmCC

small_purple:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAi0lEQVR42mNgQIAoIF4NxGegdCCSHAMzEC+NMov6vzp99f8zVWfAdKBh4H+g+EyYorQ027T//2f+x8CxFrEghbEgRQcOFB/Aqmhv4V6Qor0gRQ8ftj/Equh2822QottEmxQLshubohCjEJCiEJjj54N8tzFrI9h36zLWwXw3jQENgMJpIzSc1iGHEwBt95qDejjnKAAAAABJRU5ErkJggg==

พวกเขาเป็นภาพ 9x9 png

เมื่ออยู่บนหน้าของคุณคุณสามารถลากออกแล้วคุณจะมีไฟล์ png จริง


0

คุณสามารถใช้รหัสสีได้

 const marker: Marker = this.map.addMarkerSync({
    icon: '#008000',
    animation: 'DROP',
    position: {lat: 39.0492127, lng: -111.1435662},
    map: this.map,
 });

0

บางครั้งสิ่งที่เรียบง่ายจริงๆสามารถตอบที่ซับซ้อน ฉันไม่ได้บอกว่าคำตอบใด ๆ ข้างต้นไม่ถูกต้อง แต่ฉันจะสมัครเพื่อให้สามารถทำได้ง่ายอย่างนี้

ฉันรู้ว่าคำถามนี้เก่า แต่ถ้าใครอยากเปลี่ยนสีเป็นหมุดหรือทำเครื่องหมายให้ตรวจสอบเอกสาร: https://developers.google.com/maps/documentation/android-sdk/marker

เมื่อคุณเพิ่มเครื่องหมายของคุณเพียงตั้งไอคอนคุณสมบัติ:

GoogleMap gMap;
LatLng latLng;
....
// write your code...
....
gMap.addMarker(new MarkerOptions()
    .position(latLng)
    .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));

มี10 สีให้เลือกเริ่มต้นจาก หากนั่นยังไม่เพียงพอ (วิธีแก้ปัญหาอย่างง่าย) ฉันอาจจะไปหาคำตอบที่ซับซ้อนกว่าในคำตอบอื่น ๆ

ป.ล. : ฉันได้เขียนบางสิ่งที่คล้ายกันในคำตอบอื่นดังนั้นฉันควรอ้างถึงคำตอบนั้น แต่ครั้งสุดท้ายที่ฉันทำอย่างนั้นฉันถูกขอให้โพสต์คำตอบเพราะมันสั้นมาก (เช่นนี้) ..

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.