谷歌地图:地点号码在标记?

Use*_*ser 39 javascript gis google-maps google-maps-markers

如何在Google地图上的标记中显示数字?我想做服务器端集群,我需要显示集群代表的点数.

Jer*_*ale 43

icon: 'http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=1|FE6256|000000'
Run Code Online (Sandbox Code Playgroud)

1位和2位数字看起来很好

(来自Mauro的链接)


Con*_*211 15

以下是具有更新的"可视刷新"样式的自定义图标,您可以通过简单的.vbs脚本快速生成.我还包括一个大型的预生成集,您可以立即使用多种颜色选项:https://github.com/Concept211/Google-Maps-Markers

链接到GitHub托管的图像文件时,请使用以下格式:

https://raw.githubusercontent.com/Concept211/Google-Maps-Markers/master/images/marker_[color][character].png
Run Code Online (Sandbox Code Playgroud)

颜色

red, black, blue, green, grey, orange, purple, white, yellow
Run Code Online (Sandbox Code Playgroud)

字符

A-Z, 1-100, !, @, $, +, -, =, (%23 = #), (%25 = %), (%26 = &), (blank = •)
Run Code Online (Sandbox Code Playgroud)

例子:

RED1 https://raw.githubusercontent.com/Concept211/Google-Maps-Markers/master/images/marker_red1.png

蓝色2 https://raw.githubusercontent.com/Concept211/Google-Maps-Markers/master/images/marker_blue2.png

green3 https://raw.githubusercontent.com/Concept211/Google-Maps-Markers/master/images/marker_green3.png


Est*_*cas 13

您可以使用不带任何服务器端代码的JavaScript,根据需要创建这些图像,而不是使用默认解决方案(http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=7|FF0000|000000).

Google google.maps.Marker接受Base64作为其图标属性.有了这个,我们可以从SVG创建一个有效的Base64.

在此输入图像描述

您可以在此Plunker中看到与此图像相同的代码:http://plnkr.co/edit/jep5mVN3DsVRgtlz1GGQ?p = preview

var markers = [
  [1002, -14.2350040, -51.9252800],
  [2000, -34.028249, 151.157507],
  [123, 39.0119020, -98.4842460],
  [50, 48.8566140, 2.3522220],
  [22, 38.7755940, -9.1353670],
  [12, 12.0733335, 52.8234367],
];

function initializeMaps() {
  var myLatLng = {
    lat: -25.363,
    lng: 131.044
  };

  var map = new google.maps.Map(document.getElementById('map_canvas'), {
    zoom: 4,
    center: myLatLng
  });

  var bounds = new google.maps.LatLngBounds();

  markers.forEach(function(point) {
    generateIcon(point[0], function(src) {
      var pos = new google.maps.LatLng(point[1], point[2]);

      bounds.extend(pos);

      new google.maps.Marker({
        position: pos,
        map: map,
        icon: src
      });
    });
  });

  map.fitBounds(bounds);
}

var generateIconCache = {};

function generateIcon(number, callback) {
  if (generateIconCache[number] !== undefined) {
    callback(generateIconCache[number]);
  }

  var fontSize = 16,
    imageWidth = imageHeight = 35;

  if (number >= 1000) {
    fontSize = 10;
    imageWidth = imageHeight = 55;
  } else if (number < 1000 && number > 100) {
    fontSize = 14;
    imageWidth = imageHeight = 45;
  }

  var svg = d3.select(document.createElement('div')).append('svg')
    .attr('viewBox', '0 0 54.4 54.4')
    .append('g')

  var circles = svg.append('circle')
    .attr('cx', '27.2')
    .attr('cy', '27.2')
    .attr('r', '21.2')
    .style('fill', '#2063C6');

  var path = svg.append('path')
    .attr('d', 'M27.2,0C12.2,0,0,12.2,0,27.2s12.2,27.2,27.2,27.2s27.2-12.2,27.2-27.2S42.2,0,27.2,0z M6,27.2 C6,15.5,15.5,6,27.2,6s21.2,9.5,21.2,21.2c0,11.7-9.5,21.2-21.2,21.2S6,38.9,6,27.2z')
    .attr('fill', '#FFFFFF');

  var text = svg.append('text')
    .attr('dx', 27)
    .attr('dy', 32)
    .attr('text-anchor', 'middle')
    .attr('style', 'font-size:' + fontSize + 'px; fill: #FFFFFF; font-family: Arial, Verdana; font-weight: bold')
    .text(number);

  var svgNode = svg.node().parentNode.cloneNode(true),
    image = new Image();

  d3.select(svgNode).select('clippath').remove();

  var xmlSource = (new XMLSerializer()).serializeToString(svgNode);

  image.onload = (function(imageWidth, imageHeight) {
    var canvas = document.createElement('canvas'),
      context = canvas.getContext('2d'),
      dataURL;

    d3.select(canvas)
      .attr('width', imageWidth)
      .attr('height', imageHeight);

    context.drawImage(image, 0, 0, imageWidth, imageHeight);

    dataURL = canvas.toDataURL();
    generateIconCache[number] = dataURL;

    callback(dataURL);
  }).bind(this, imageWidth, imageHeight);

  image.src = 'data:image/svg+xml;base64,' + btoa(encodeURIComponent(xmlSource).replace(/%([0-9A-F]{2})/g, function(match, p1) {
    return String.fromCharCode('0x' + p1);
  }));
}

initializeMaps();
Run Code Online (Sandbox Code Playgroud)
#map_canvas {
  width: 100%;
  height: 300px;
}
Run Code Online (Sandbox Code Playgroud)
<!DOCTYPE html>
<html>

  <head>
    <link rel="stylesheet" href="style.css">
    
    <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js"></script>
    
  </head>

  <body>
    <div id="map_canvas"></div>
  </body>
  
  <script src="script.js"></script>

</html>
Run Code Online (Sandbox Code Playgroud)

在这个演示中,我使用D3.js创建SVG,然后将SVG转换为Canvas,这样我就可以根据需要调整图像大小,之后我使用canvas'toDataURL方法获得Base64.

所有这些演示都基于我的同事@thiago-mata的代码.感谢他.


Val*_*sky 8

最新的google js API有google.maps.MarkerLabel对象.

因此,您可以轻松设置标签的文本/样式

var mIcon = {
  path: google.maps.SymbolPath.CIRCLE,
  fillOpacity: 1,
  fillColor: '#fff',
  strokeOpacity: 1,
  strokeWeight: 1,
  strokeColor: '#333',
  scale: 12
};

var gMarker = new google.maps.Marker({
  map: gmap,
  position: latLng,
  title: 'Number 123',
  icon: mIcon,
  label: {color: '#000', fontSize: '12px', fontWeight: '600',
    text: '123'}
});
Run Code Online (Sandbox Code Playgroud)

的jsfiddle


Mau*_*uro 6

刚刚找到这个教程:http://biostall.com/adding-number-or-letters-to-google-maps-api-markers

它看起来不是最好的解决方案,但确实有效.


Sam*_*bes 5

您可以在标记上使用标签,这是一个关于GIcon.label的教程.

您也可以使用GMarker.openInfoWindow.

提示:这是我发现的关于google maps api 的最佳教程(当然在官方文档之后)


Jul*_*lle 5

最简单的解决方案:

marker = new google.maps.Marker({
  position: my_position,
  map: map,
  label: num_events+'' //Needs to be a string. No integers allowed
});
Run Code Online (Sandbox Code Playgroud)

请参阅https://developers.google.com/maps/documentation/javascript/examples/marker-labels


有关标记布局的更多控制,请参阅Valery Viktorovsky 的答案