【问题标题】:How to fill different colours in multiple polygons Google Maps V3?如何在多个多边形 Google Maps V3 中填充不同的颜色?
【发布时间】:2015-05-09 15:27:00
【问题描述】:

我尝试用多个多边形构建地图,但在组合颜色时遇到了问题。

我制作了 5 个多边形并填充了 5 种颜色,但结果只显示了 2 种颜色。

示例代码:

var map;
var infoWindow;
var bermudaTriangle = new Array();


// Angular controllers etc


function initialize() {

  // map options
  var mapOptions = {
    zoom: 13,
    center: new google.maps.LatLng(-6.176037, 106.827142), 
    mapTypeId: google.maps.MapTypeId.TERRAIN,
  };


  // initialize 
  //var bermudaTriangle;
  var bounds = new google.maps.LatLngBounds();


  // define map
  map = new google.maps.Map(document.getElementById('map-canvas'),
      mapOptions);

  // ************** POLYGON 1 **************************************************

  // Define the LatLng coordinates for the polygon.

    var coorArray = [[[........]]];

    var triangleCoords = new Array();
    var element1;
    var element2;

    for (i = 0; i < coorArray[0].length; i++) { 
      element1 = coorArray[0][i][1];
      element2 = coorArray[0][i][0];
      triangleCoords.push(new google.maps.LatLng(element1, element2));
    }


  // Construct the polygon.
  bermudaTriangle[0] = new google.maps.Polygon({
    paths: triangleCoords,
    strokeColor: '#GG5555',
    strokeOpacity: 0.8,
    strokeWeight: 3,
    fillColor: '#FF8533',
    fillOpacity: 0.35
  });


  // ************** POLYGON 2 **************************************************

  window.alert("size before: " + bermudaTriangle.length)

  var coorArray2 = [[[..........]]];

  addNewPoly(coorArray2);

  window.alert("size after: " + bermudaTriangle.length)

  for(var i=0,l=bermudaTriangle.length;i<l;i++) {
    bermudaTriangle[i].setMap(map);

    // map.fitBounds(bounds);


  // Add a listener for the click event.
  google.maps.event.addListener(bermudaTriangle[i], 'click', showArrays);

  infoWindow = new google.maps.InfoWindow();


  }

function addNewPoly(coorArray2) {

    var triangleCoords = new Array();
    var element1;
    var element2;

    window.alert("inside addNewPoly")

    for (i = 0; i < coorArray2[0].length; i++) { 
    element1 = coorArray2[0][i][1];
    element2 = coorArray2[0][i][0];
    triangleCoords.push(new google.maps.LatLng(element1, element2));
    }

    // Construct the polygon.
  bermudaTriangle[bermudaTriangle.length] = new google.maps.Polygon({
    paths: triangleCoords,
    strokeColor: '#GG5555',
    strokeOpacity: 0.8,
    strokeWeight: 3,
    fillColor: '#FF4D4D',
    fillOpacity: 0.35
  });
}

   // ************** POLYGON 3**************************************************

  window.alert("size before: " + bermudaTriangle.length)

  var coorArray3 = [[[................]]];

  addNewPoly(coorArray3);

  window.alert("size after: " + bermudaTriangle.length)

  for(var i=0,l=bermudaTriangle.length;i<l;i++) {
    bermudaTriangle[i].setMap(map)

    // map.fitBounds(bounds);


  // Add a listener for the click event.
  google.maps.event.addListener(bermudaTriangle[i], 'click', showArrays);

  infoWindow = new google.maps.InfoWindow();

  }

function addNewPoly(coorArray3) {

    var triangleCoords = new Array();
    var element1;
    var element2;

    window.alert("inside addNewPoly")

    for (i = 0; i < coorArray3[0].length; i++) { 
    element1 = coorArray3[0][i][1];
    element2 = coorArray3[0][i][0];
    triangleCoords.push(new google.maps.LatLng(element1, element2));
    }

    // Construct the polygon.
  bermudaTriangle[bermudaTriangle.length] = new google.maps.Polygon({
    paths: triangleCoords,
    strokeColor: '#GG5555',
    strokeOpacity: 0.8,
    strokeWeight: 3,
    fillColor: '#FFFF4D',
    fillOpacity: 0.35
  });
  }


  // ************** POLYGON 4 **************************************************

  window.alert("size before: " + bermudaTriangle.length)

  var coorArray4 = [[[......................]]];

  addNewPoly(coorArray4);

  window.alert("size after: " + bermudaTriangle.length)

  for(var i=0,l=bermudaTriangle.length;i<l;i++) {
    bermudaTriangle[i].setMap(map);

    // map.fitBounds(bounds);


  // Add a listener for the click event.
  google.maps.event.addListener(bermudaTriangle[i], 'click', showArrays);

  infoWindow = new google.maps.InfoWindow();

  }

function addNewPoly(coorArray4) {

    var triangleCoords = new Array();
    var element1;
    var element2;

    window.alert("inside addNewPoly")

    for (i = 0; i < coorArray4[0].length; i++) { 
    element1 = coorArray4[0][i][1];
    element2 = coorArray4[0][i][0];
    triangleCoords.push(new google.maps.LatLng(element1, element2));
    }

    // Construct the polygon.
  bermudaTriangle[bermudaTriangle.length] = new google.maps.Polygon({
    paths: triangleCoords,
    strokeColor: '#GG5555',
    strokeOpacity: 0.8,
    strokeWeight: 3,
    fillColor: '#A375FF',
    fillOpacity: 0.35
  });
  }

  // ************** POLYGON 5**************************************************

  window.alert("size before: " + bermudaTriangle.length)

  var coorArray5= [[[.................]]];

  addNewPoly(coorArray5);

  window.alert("size after: " + bermudaTriangle.length)

  for(var i=0,l=bermudaTriangle.length;i<l;i++) {
    bermudaTriangle[i].setMap(map);

    // map.fitBounds(bounds);


  // Add a listener for the click event.
  google.maps.event.addListener(bermudaTriangle[i], 'click', showArrays);

  infoWindow = new google.maps.InfoWindow();

  }

function addNewPoly(coorArray5) {

    var triangleCoords = new Array();
    var element1;
    var element2;

    window.alert("inside addNewPoly")

    for (i = 0; i < coorArray5[0].length; i++) { 
    element1 = coorArray5[0][i][1];
    element2 = coorArray5[0][i][0];
    triangleCoords.push(new google.maps.LatLng(element1, element2));
    }

    // Construct the polygon.
  bermudaTriangle[bermudaTriangle.length] = new google.maps.Polygon({
    paths: triangleCoords,
    strokeColor: '#GG5555',
    strokeOpacity: 0.8,
    strokeWeight: 3,
    fillColor: '#4DFF4D',
    fillOpacity: 0.35
  });

  return bermudaTriangle;  

  }

【问题讨论】:

  • 您可能希望将代码缩短为仅相关部分。这真的有点长。
  • 而您删除的部分(多边形坐标)是重现问题所必需的。请提供一个 Minimal, Complete, Tested and Readable example 来表明该问题。
  • tripulous.me/trip-detail-4-1.html这是你的意思???
  • @PaulWilliams yaa 我知道.. 抱歉,我刚刚研究过,还没有尝试使用数据库
  • @geocodezip 因为坐标太长了,谢谢你的建议

标签: javascript google-maps google-maps-api-3 polygons


【解决方案1】:

您有多个同名函数 (addNewPoly)。特定的浏览器会选择一个。

另外,#GG5555 不是有效颜色。

一种可能的解决方案,创建一个函数,将所需的颜色作为附加参数传入。

function addNewPoly(coorArray, strokeColor, fillColor) {

    var triangleCoords = new Array();
    var element1;
    var element2;

    window.alert("inside addNewPoly")

    for (i = 0; i < coorArray[0].length; i++) { 
    element1 = coorArray[0][i][1];
    element2 = coorArray[0][i][0];
    triangleCoords.push(new google.maps.LatLng(element1, element2));
    }

    // Construct the polygon.
  bermudaTriangle[bermudaTriangle.length] = new google.maps.Polygon({
    paths: triangleCoords,
    strokeColor: strokeColor,
    strokeOpacity: 0.8,
    strokeWeight: 3,
    fillColor: fillColor,
    fillOpacity: 0.35
  });

  return bermudaTriangle;  

  }

或者您可以为每个坐标数组创建不同的函数 (addNewPoly5())。

【讨论】:

  • 让我在这段代码中尝试不同的功能... strokeColor 和 fillColor 仍然使用十六进制颜色对吗?
猜你喜欢
  • 2011-08-21
  • 1970-01-01
  • 1970-01-01
  • 2011-08-24
  • 2013-04-20
  • 2012-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-03
相关资源
最近更新 更多