【问题标题】:Google Map icon colour change by value from Fusion TableGoogle Map 图标颜色按 Fusion Table 中的值更改
【发布时间】:2012-12-23 11:23:26
【问题描述】:

我在http://www.gfmap.com 有一个网站,它显示了无麸质餐厅、商店、面包店等。它是从一个包含 20,000 多件商品的 Fusion Table 上运行的。

我想知道是否可以根据类别(餐厅等)更改 Google 地图图标颜色

这是代码...

<script type="text/javascript">     
 var initialLocation; 
 var companyLocale = new google.maps.LatLng(-33.869629, 151.206955); 
 var localArray = [companyLocale]; 
 var noGeo = new google.maps.LatLng(51.506325, -0.127144);        
 var map;    
 var layerl0;    
 function initialize() {
    map = new google.maps.Map(document.getElementById('themap'),
     {
        zoom: 12 
     });
    if(navigator.geolocation) {
        browserSupportFlag = true;
        navigator.geolocation.getCurrentPosition(function(position) {
        initialLocation = new     google.maps.LatLng(position.coords.latitude,position.coords.longitude);
        map.setCenter(initialLocation);
    }, function() {
        handleNoGeolocation(browserSupportFlag);
       });
    }else {
       handleNoGeolocation();
    }
function handleNoGeolocation() {
  initialLocation = noGeo;
  localArray.unshift(initialLocation);
  map.setCenter(initialLocation);
}
    var style = [
    {
      featureType: 'administrative.land_parcel',
      elementType: 'all',
      stylers: [
        { visibility: 'off' }
      ]
    }
  ];

    var styledMapType = new google.maps.StyledMapType(style, {
      map: map,
      name: 'Styled Map'
    });
  map.mapTypes.set('map-style', styledMapType);
  map.setMapTypeId('map-style');
  layerl0 = new google.maps.FusionTablesLayer({
    query: {
      select: "'location'",
      from: 4015038
    },
    map: map
  });
}
function changeMapl0() {
  var searchString = document.getElementById('search-string-l0').value.replace(/'/g, "\\'");
  layerl0.setOptions({
    query: {
      select: "'location'",
      from: 4015038,
      where: "'Type' = '" + searchString + "'"
    }
  });
}
google.maps.event.addDomListener(window, 'load', initialize);
function ga() {
  var address = document.getElementById('q').value;
  if (address != ''){
    var geocoder = new google.maps.Geocoder();
        geocoder.geocode( { 'address': address + ' AU'}, function(results, status) {
          if (status == google.maps.GeocoderStatus.OK) {
            map.setCenter(results[0].geometry.location);
            if (results[0].geometry.location_type == google.maps.GeocoderLocationType.APPROXIMATE){
              map.setZoom(12);
            } else {map.setZoom(12);}
          }
          else {alert("Sorry, we can't find that place using Google.");}
        });

  }
}
</script>
<script type="text/javascript">

var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-31494612-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();

</script>

我认为答案与Custom Google Map Icon If Value >=1 这篇帖子有关,但我无法让它发挥作用。我不懂 JavaScript,而且我真的只是尽我所能一起破解了这个网站。

任何帮助表示赞赏。

谢谢

马特

【问题讨论】:

  • 你应该重新格式化你的代码块,它很难阅读

标签: google-maps-api-3 google-fusion-tables


【解决方案1】:

有很多预定义的标记可以用于 fusionTables(除了它们之外,没有其他方法可以应用)。

您可以在这里找到它们:https://www.google.com/fusiontables/DataSource?docid=1BDnT5U1Spyaes0Nj3DXciJKa_tuu7CzNRXWdVA (点击可视化->地图查看)

您可以将它们用于图层的样式,例如:

styles:[{
            where: "Type='Restaurant'",
            markerOptions: {iconName: "rec_dining"}
          }]

演示:http://jsfiddle.net/doktormolle/5MuL4/

【讨论】:

  • 或者您可以使用 FusionTables 用户界面创建一个新列并在那里分配它们。
  • 如果他只想拥有基于类别的标记,那不是多余的吗?
  • 取决于“类别”有多少。如果超过 5 个(在这种情况下没有),动态样式解决方案将不起作用。
  • 非常感谢。 “风格”看起来可能是可行的。今晚孩子们睡觉的时候我会试试的!我将把命令放在我上面的地图代码中还是没关系?非常感谢这个例子。我应该没问题。你是明星,莫勒博士。
  • 当您查看链接的小提琴时,您必须将对象用作new google.maps.FusionTablesLayer() 的参数,并在您的代码中将其用作layerl0.setOptions() 的参数
【解决方案2】:

您可以使用 url 从Google charts api 动态请求图标图像:

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

如下所示: 图像为 21x43 像素,图钉尖端位于 (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”替换为您需要的颜色代码。

【讨论】:

  • 您是否读到我们谈论 fusionTables,您将如何在其中应用标记?
猜你喜欢
  • 2015-12-10
  • 2013-05-11
  • 2013-10-12
  • 2013-01-08
  • 1970-01-01
  • 2019-09-18
  • 1970-01-01
  • 2013-04-12
  • 2011-04-06
相关资源
最近更新 更多