更改Google Map GeoChart的中心

时间:2012-10-18 19:09:34

标签: javascript google-visualization

我正在与海洋科学家合作,他们从海岸采集样本。我想将图表的中心改为离海岸。我想为图表的中心提供纬度/经度对,或者为地图区域的窗口/视图提供两个纬度/经度对,或者指定多个状态,如US-CT-NY。我希望有一个隐藏的API,如geochart.center = {lat: 89, long: -127}

function drawVisualization() {
  var data = google.visualization.arrayToDataTable([
    ['Lat', 'Long', 'Popularity'],

    [41.083333333276, -73.39999999978, 20.4 ],
    [41.083333333276, -73.39999999978, 20.6 ],
    [41.099550000113, -73.415400000078, 19.0 ]
  ]);

  var options = {title:'Temperature', region:'US-CT', resolution:'metros', width: 556, height: 347};
  var geochart = new google.visualization.GeoChart(
      document.getElementById('visualization'));
  geochart.draw(data, options);
} 

http://code.google.com/apis/ajax/playground/?type=visualization#geo_chart

2 个答案:

答案 0 :(得分:2)

不幸的是,当前版本的google geochart中没有这样的选项。 但是我可以想到一些可能或多或少有效的CSS黑客。 类似的东西:

#visualization {
width:550px;
overflow:hidden;
}
#visualization svg {
margin-left:-100px;
}

您必须弄清楚哪些值对您有用。

我过去曾使用过这种方法来改善API在某些领域的'裁剪'。

它远非完美,但我认为这是操纵地图生成的裁剪和中心的唯一方法。

答案 1 :(得分:1)

我需要做类似的事情,加上其他一些调整。我想分享我的黑客,以防它帮助别人......

首先是html:

<div id="geo_outer"><div id="<?php $inner ?>"></div></div>

#geo_outer是用于裁剪/构建实际geochart容器的容器。

geochart容器最初被称为“geo_inner”,但我决定要选择澳大利亚和澳大利亚的地图。新西兰(ANZ)和澳大利亚(AUS)地图取决于新西兰是否在数据库的结果集中。

为了放大地图并最大化geo_outer的可用空间,我只是将内部div的尺寸增加到比#geo_outer的尺寸更大的尺寸并将其移动直到我将所需区域在#geo_outer中垂直和水平居中。 *默认情况下,谷歌的图像会尝试填充其容器的尺寸(内部) - 这意味着我不需要在javascript选项中摆弄geochart的宽度/高度。

enter image description here

#geo_outer {width:600px;height:490px;overflow:hidden;}
#geo_innerAUS {
    width:1100px;
    height:1048px;
    margin-top:-202px;
    margin-left:-235px;
}
#geo_innerANZ {
    width:850px;
    height:748px;
    margin-top:-112px;
    margin-left:-205px;
}

这提供了更好的视觉效果,但我仍然不希望在北部和东北部看到所有那些不必要的岛屿。所以,剪辑路径到救援。现在,我不是很自然地将点数排成一行,所以我通过浏览器工具,屏幕截图突出显示内部div,并将其放入http://bennettfeely.com/clippy/,从而开始了简单的方法。我可以粗略地选择我需要的多边形,然后拖动点直到事情正确。 (一旦我将多边形点应用到我的页面,我确实需要进行一些小的调整。)

这是添加到相应div的css:

AUS:-webkit-clip-path:polygon(58% 21%, 71% 41%, 75% 66%, 22% 66%, 22% 24%); clip-path:polygon(58% 21%, 71% 41%, 75% 66%, 22% 66%, 22% 24%); ANZ:-webkit-clip-path:polygon(60% 18%, 97% 56%, 74% 80%, 26% 80%, 26% 22%); clip-path:polygon(60% 18%, 97% 56%, 74% 80%, 26% 80%, 26% 22%);

如果使用background-color,您可以通过浏览器开发人员工具轻松微调多边形:红色;在内心的第一个孩子(div)。

enter image description here

最后,如果要包含图例,请确保不要从底部修剪太多。我真的不得不深入挖掘DOM以找到那个小流氓。这里我用css将其移动到视图中:

#geo_innerAUS > div > div:nth-child(1) > div > svg > g > g:nth-child(3){transform:translate(350px,-350px);}
#geo_innerANZ > div > div:nth-child(1) > div > svg > g > g:nth-child(3){transform:translate(275px,-140px);}

P.S。这是我在关闭正文之前输入的javascript:

function drawGeoChart(){
    var data = google.visualization.arrayToDataTable([
        <?php echo $geo_jsdata; ?>
    ]);
    var options={
        region:'AU',
        displayMode:'regions',
        colorAxis:{colors: ['red','yellow','green']},
        resolution:'provinces'
    };
    var chart=new google.visualization.GeoChart($('#geo_outer>div:first-child')[0]);
        chart.draw(data,options);
}
google.charts.load("current",{packages:["geochart"]});
google.charts.setOnLoadCallback(drawGeoChart);

这完全适用于我的手机和笔记本电脑。我怀疑大多数设备都遇到了最小的麻烦,因为我的容器有像素尺寸,剪辑路径都是百分比。当我将浏览器放大和缩小时,一切都很好。