【问题标题】:Clickable countries using Google Maps API使用 Google Maps API 的可点击国家
【发布时间】:2016-04-26 13:22:40
【问题描述】:

我刚刚开始涉足 Google Maps API,但我已经陷入困境。我正在寻找一种使用谷歌地图重新创建this 类型的地图的方法。我需要删除所有标签,获得空白背景(我尝试使用地图样式,但这对我不起作用,下面的代码示例)并在我将鼠标悬停在国家/地区上时点亮它们。

是否有任何我在搜索中似乎遗漏的教程可以帮助我,或者任何人都可以为我指明正确的方向? :)

var _mapstyle = [
  {
    featureType: "all",
    elementType: "labels",
    stylers: [
      { visibility: "off" }
    ]
  }
];

function create_map()
{
    _map = new google.maps.Map(document.getElementById("eyewebz-map"), 
    {
        zoom: 2,
        center: new google.maps.LatLng(20, 0), 
        navigationControl: true,
        navigationControlOptions: {
            style: google.maps.NavigationControlStyle.DEFAULT
        },
        mapTypeControl: true,
        mapTypeControlOptions: {
            style: google.maps.MapTypeControlStyle.DROPDOWN_MENU
        },
        scaleControl: true, 
        mapTypeIds: ['_mapstyle']
    });

    _display.setMap(_map);
    _display.setPanel(document.getElementById("NavigationText"));
}

编辑 这就是地图的用途:我在我的生活中旅行了一点,并希望做更多的事情。自从我第一次大旅行以来,我一直在写博客。我现在开发了一个新博客,我想让我去过的国家/地区可以点击,并在点击后跟随一个 url。理想的情况是,当我单击一个国家/地区时,它会将我带到一个页面,其中只有该特定国家/地区显示在带有一些标记(访问地点)的地图中。单击这些标记后,它应该会显示特定的帖子/一些信息。

【问题讨论】:

  • -1 投票者能否也解释一下他为什么投了该票?为什么他投票关闭?
  • 更正我,您要求清除默认图层并为突出显示的国家/地区创建图层,对吗?你有国家多边形吗?一次可以看到多少个国家/地区,并且性能对您来说至关重要?
  • 我没有国家多边形。性能不是那么重要,它会是一个世界观:)
  • 您应该问自己几件事:1) 谷歌地图是正确的产品吗? 2)您需要多边形的详细程度是多少? 3) 你有/知道如何获取多边形数据吗? 4)绘制多边形后,您想对地图做什么?所有这些问题都有某种关联。因此,请仔细考虑,探索各种 API,如果您不想被引导到错误的方向,也许可以在您的问题中提供更多细节。
  • 还有其他产品推荐吗?我在我的生活中旅行了一点,并希望做更多的事情。自从我第一次大旅行以来,我一直在写博客。我现在开发了一个新博客,我想让我去过的国家/地区可以点击,并在点击后跟随一个 url。理想的情况是,当我单击一个国家/地区时,它会将我带到一个页面,其中只有该特定国家/地区显示在带有一些标记(访问地点)的地图中。单击这些标记后,它应该会显示特定的帖子。

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


【解决方案1】:

这样的事情可以吗?复制并粘贴到 HTML 页面正文 (JSFiddler here) 中。

<style type="text/css">
  #map-canvas {
    height: 600px;
    width: 800px;
  }
</style>

<script type="text/javascript"
    src="https://maps.google.com/maps/api/js?sensor=false"></script>

<script type="text/javascript">
  // the map
  var map;

  function initialize() {
    var myOptions = {
      zoom: 2,
      center: new google.maps.LatLng(10, 0),
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };

    // initialize the map
    map = new google.maps.Map(document.getElementById('map-canvas'),
        myOptions);

    // these are the map styles
    var styles = [
        {
          stylers: [
            { hue: "#00ffe6" },
            { saturation: -20 }
          ]
        },
        {
          featureType: "landscape",
          stylers: [
            { hue: "#ffff66" },
            { saturation: 100 }
          ]
        },{
          featureType: "road",
          stylers: [
            { visibility: "off" }
          ]
        },{
          featureType: "administrative.land_parcel",
          stylers: [
            { visibility: "off" }
          ]
        },{
          featureType: "administrative.locality",
          stylers: [
            { visibility: "off" }
          ]
        },{
          featureType: "administrative.neighborhood",
          stylers: [
            { visibility: "off" }
          ]
        },{
          featureType: "administrative.province",
          stylers: [
            { visibility: "off" }
          ]
        },{
          featureType: "landscape.man_made",
          stylers: [
            { visibility: "off" }
          ]
        },{
          featureType: "landscape.natural",
          stylers: [
            { visibility: "off" }
          ]
        },{
          featureType: "poi",
          stylers: [
            { visibility: "off" }
          ]
        },{
          featureType: "transit",
          stylers: [
            { visibility: "off" }
          ]
        }
      ];

    map.setOptions({styles: styles});

    // Initialize JSONP request
    var script = document.createElement('script');
    var url = ['https://www.googleapis.com/fusiontables/v1/query?'];
    url.push('sql=');
    var query = 'SELECT name, kml_4326 FROM ' +
        '1foc3xO9DyfSIF6ofvN0kp2bxSfSeKog5FbdWdQ';
    var encodedQuery = encodeURIComponent(query);
    url.push(encodedQuery);
    url.push('&callback=drawMap');
    url.push('&key=AIzaSyAm9yWCV7JPCTHCJut8whOjARd7pwROFDQ');
    script.src = url.join('');
    var body = document.getElementsByTagName('body')[0];
    body.appendChild(script);
  }

  function drawMap(data) {
    var rows = data['rows'];
    for (var i in rows) {
      if (rows[i][0] != 'Antarctica') {
        var newCoordinates = [];
        var geometries = rows[i][1]['geometries'];
        if (geometries) {
          for (var j in geometries) {
            newCoordinates.push(constructNewCoordinates(geometries[j]));
          }
        } else {
          newCoordinates = constructNewCoordinates(rows[i][1]['geometry']);
        }
        var country = new google.maps.Polygon({
          paths: newCoordinates,
          strokeColor: '#ff9900',
          strokeOpacity: 1,
          strokeWeight: 0.3,
          fillColor: '#ffff66',
          fillOpacity: 0,
          name: rows[i][0]
        });
        google.maps.event.addListener(country, 'mouseover', function() {
          this.setOptions({fillOpacity: 0.4});
        });
        google.maps.event.addListener(country, 'mouseout', function() {
          this.setOptions({fillOpacity: 0});
        });
        google.maps.event.addListener(country, 'click', function() {
          alert(this.name);
        });

        country.setMap(map);
      }
    }
  }

  function constructNewCoordinates(polygon) {
    var newCoordinates = [];
    var coordinates = polygon['coordinates'][0];
    for (var i in coordinates) {
      newCoordinates.push(
          new google.maps.LatLng(coordinates[i][1], coordinates[i][0]));
    }
    return newCoordinates;
  }

  google.maps.event.addDomListener(window, 'load', initialize);
</script>

<div id="map-canvas"></div>

这是修改后的版本 Fusion Tables Layer Example: Mouseover Map Styles.

你也应该看看Styled Maps

您可能感兴趣的另一件事是Natural Earth Data。这在您需要多边形数据源的情况下。这里有一个使用它的例子GViz API Example: Fusion Tables Data Source

【讨论】:

  • 这正是我想要的!你是救生员!
  • 还有一个问题:我要更改哪些参数来更改国家/地区的默认灰色背景(我设法更改了所有其他参数,除了那个)。
  • 看看这个The Styled Map Wizard,太可爱了! :)
  • 哇,太棒了!谢谢你。这是一个救生员!
  • 有人知道一旦 Fusion 表被弃用了怎么办? support.google.com/fusiontables/answer/9185417
【解决方案2】:

由于不推荐使用融合表,因此没有内置的谷歌解决方案可以做到这一点。

这是我制作的小示例代码:

https://github.com/arturssmirnovs/Clickable-countries-using-Google-Maps-API

这里是工作示例:https://arturssmirnovs.github.io/Clickable-countries-using-Google-Maps-API/json/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    • 1970-01-01
    相关资源
    最近更新 更多