48

Google マップのマーカーに番号を表示するにはどうすればよいですか? サーバー側のクラスタリングを行いたいのですが、クラスターが表すポイントの数を表示する必要があります。

4

11 に答える 11

49
icon: 'http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=1|FE6256|000000'

1桁と2桁の数字がきれいに見える

(マウロのリンクから)

于 2012-05-23T21:49:42.670 に答える
19

シンプルな .vbs スクリプトですばやく生成できる、更新された「ビジュアル リフレッシュ」スタイルのカスタム アイコンを次に示します。また、複数の色オプションですぐに使用できる事前に生成された大きなセットも含めました: https://github.com/Concept211/Google-Maps-Markers

GitHub がホストするイメージ ファイルにリンクする場合は、次の形式を使用します。

https://raw.githubusercontent.com/Concept211/Google-Maps-Markers/master/images/marker_[color][character].png

red, black, blue, green, grey, orange, purple, white, yellow

キャラクター

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

例:

赤1 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

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

于 2015-08-04T19:51:56.900 に答える
17

デフォルトのソリューション ( http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=7|FF0000|000000 ) を使用する代わりに、サーバー側のコードなしで JavaScript を使用して、必要に応じてこれらの画像を作成できます。

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();
#map_canvas {
  width: 100%;
  height: 300px;
}
<!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>

このデモでは、D3.js を使用して SVG を作成し、SVG を Canvas に変換して、必要に応じて画像のサイズを変更し、その後 canvas の toDataURL メソッドを使用して Base64 を取得します。

このデモはすべて、私の仲間の@thiago-mataのコードに基づいています。彼に称賛を。

于 2015-10-01T17:07:01.300 に答える
6

このチュートリアルを見つけました: http://biostall.com/adding-number-or-letters-to-google-maps-api-markers

それは最善の解決策のようには見えませんが、うまくいきます。

于 2011-12-22T22:12:14.303 に答える
5

マーカーの上にラベルを使用できます。ここに GIcon.label に関するチュートリアルがあります。

GMarker.openInfoWindowも使用できます。

ヒント:これは、 Google マップ API について私が見つけた最高のチュートリアルです (もちろん、公式ドキュメントの後で)

于 2010-05-23T04:38:38.537 に答える
2
while creating marker use the 

<script>
var marker = new google.maps.Marker({
            position: myLanLat,
            icon:'icon: 'https://chart.googleapis.com/chart?chst=d_map_pin_letter&chld='+ (position) +'|FF776B|000000',
            map: map,
                  });
<script>
于 2013-02-25T13:37:00.057 に答える
1
<hr/>
1. add Google maps script To _Layout page.<br/>
     &lt;script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"&gt;   &lt;/script &gt;
<hr/>
2. Add script to your view page.

  &lt;script type="text/javascript" &gt;<br/>
   var mapLocation = [['Lucknow', 26.74561, 80.859375],<br/>
                    ['New Delhi', 28.613459, 77.695313],<br/>
                    ['Jaipur', 26.980829, 75.849609],<br/>
                    ['Ahmedabad', 22.674847, 72.333984],<br/>
                    ['Mumbai', 18.760713, 73.015135]];<br/>
    $(document).ready(function () { initialize(); });

//ビューで初期化ロードデフォルトマップ

function initialize() {<br/>
        var latLng = new google.maps.LatLng(22.917923, 76.992188);<br/>
        var myOptions = { center: latLng, zoom: 10,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };<br/>
        var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

        setMarker(map, mapLocation);
    }

function setMarker(map, mapLoc) {
    for (i = 0; i < mapLoc.length; i++) {
        var loca = mapLoc[i];
        var myLanLat = new google.maps.LatLng(loca[1], loca[2]);
        var marker = new google.maps.Marker({
            position: myLanLat,
            icon:'https://chart.googleapis.com/chart?chst=d_map_pin_letter&chld='+ ( i     + 1) +'|FF776B|000000',
            shadow:'https://chart.googleapis.com/chart?chst=d_map_pin_shadow',
            map: map,
            tittle: loca[0],
            zIndex: loca[3]
        });
    }
}

于 2013-02-12T10:31:04.813 に答える
1

上記のリンク (' http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=1|FE6256|000000 ') は SSL 経由では使用できません。number 画像をローカルに生成して保存するには:

for i in {1..99}; do curl -o ./${i}_map_icon.png  "http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=${i}|FE6256|000000"; echo $i; done
于 2014-03-28T20:48:47.323 に答える
0

最善の解決策は、リモートまたはローカルの画像とテキストを URL を介してサーバー側スクリプトに渡すことです。マーカーをプロットするときは、この URL をアイコンの値として使用し、サーバー側のスクリプトは、提供された画像 (サーバーに保存されることはありません) のコピーを、テキストを画像に焼き付けて返します。したがって、マップ上にドロップすると、リアルタイムでカスタム マーカー イメージの数字またはテキストをレンダリングできます。

これを行う方法については、私のブログのチュートリアルを参照してください。- http://www.devinrolsen.com/google-maps-marker-icons-with-numbers-using-php-gd/

于 2013-02-09T19:28:18.467 に答える