猪流感地图

绝大多数人可能已经听说了猪流感病毒在墨西哥的爆发,现在很多人和好几个组织利用Google Maps的自建地图或API建立了自己的猪流感地图来跟踪最新爆发地区:

  • HealthMap.org 综合若干个来源的数据利用Google Maps API跟踪全球性的包括猪流感在内的多种传染性疾病
  • Ushandi.com 在网站上还提供了短信接入号码,利用Google Maps API显示提交给他们的报告
  • Dr. Henry Niman 致力于研究病毒进化,利用Google  Maps自建了一副猪流感地图跟踪疑似和确诊病例,现基于医学报告和发送给他的Email正持续更新他的地图

    Tracking the progress of H1N1 swine flu
  • 另一个受瞩目的自建地图是一英国计算机科学家建立的,他的地图也接受用户对其地图进行补充
    2009 Swine Flu (H1N1) Outbreak Map

你还可以从其他一些来源获得猪流感信息:世界卫生组织美国疾病控制中心联合国粮农组织

Via Google Maps team

美国的石油从哪里来


包括美、日、中等工业化国家每年都耗费大量资金从国外进口石油,现在作为Google.org地理挑战赠款计划一部分,RMI公司洛矶山研究所发布了一个建立在Googlemaps上的地图应用,将美国历年进口的石油数量以动画形式展示出来。

猛击绿色按钮可以播放过去35年间美国从世界各地进口的石油大致数量,进口越多,线条就越粗。从图中可以看出,一个有意思的时期是1982至1985年第二次石油危机期间,由于价格降低造成来自中东地区石油进口下降到非常低的水平。

在过去5个月虽然石油价格急剧下降,大多数人预计石油价格将保持高到不远的将来。

Via: Google LatLong: Where does our oil come from?

Google Maps API查询限制:1.73秒

在Google Maps API申请API key页面上悄悄地增加了一些内容,主要是对API查询数量的一个限制:

  • There is no limit on the number of page views you may generate per day using the Maps API. However, if you expect more than 500,000 page views per day, please contact us in advance so we can provision additional capacity to handle your traffic. Otherwise your quality of service may be degraded.
  • There is a limit of 50,000 geocode requests per day per Maps API key. This translates to roughly one geocode request every 1.73 seconds. If you go over this 24-hour limit, the Maps API geocoder may stop working for you temporarily. If you continue to abuse this limit, your access to the Maps API geocoder may be blocked permanently.

这些内容在用户条款里并没有出现,可能Google认为这些内容比较重要:

  • 你页面显示是每天500,000次。
  • 地址解码查询50,000次,也就是不超过1.73秒一次。
  • google承诺地图里没有广告,如果要增加,官方会贴出通知。
  • 你的服务对别人也必须是免费的。
  • 不能改变公司徽标logo(我前几天只是新开个窗口,应该不算违反)。
  • 你应当经常保持你的Google Maps API版本与最新一致。
  • 还有Google对使用她的地图来显示诸如那里可以买到非法药物比较反感。

GoogleMAPs Hack

问题的提出:在google map api下写程序的时候,在地图的最下会显示google log和Terms of Use,但是有一个问题如果你点击google log或者Terms of Use,将会跳出你的页面,打断程序显示。如何让链接新开一页面显示呢?

Terms of Use比较好办:
可以使用类似如下代码查找替代

var ANode = document.getElementsByTagName(“A”);
for (var i = 0; i < ANode.length; i++) {
if (ANode[i].innerHTML = “Terms of Use”) {
ANode[i].target=”_top”;
};};

但是logo图象对应的链接就比较麻烦了,logo图象在”DOM”里显示为”IMG”标签而”A”标签被google故意隐藏了,你点击的时候会将你带到google maps自己的网站上,显示你刚才指定的区域。如何修改target还得废点大脑。无巧不成书,晚上在调试的时候,突然发现logo被替换为文字了,而下午还显示正常,期间并未修改代码。重新回到原来的地方检查,才知道原来晚上google升级api了,logo链接对应的”A”标签不再被隐藏了,haha,顺应民意啊!那下面就简单了,你可以在下面测试地图,链接会在新窗口打开。

var ANode = document.getElementsByTagName(“A”);
for (var i = 0; i < ANode.length; i++) {
ANode[i].target=”_blank”;} ;
map.openInfoWindow(map.getCenter(),document.createTextNode(“Tag(‘A’).length=”+ANode.length));
};

GoogleMAPs TEST

update:
今天下午缺省版本又退回到v2.70a了,本文以上特性在v2.71中可以获得支持。
现在v2.73已经建立而v2.70a还是缺省的版本,所以现在的api一共有四个版本,而不是通常的三个。
可以通过以下方法获得新版本api:
&v=2 gives v2.70a “default”
&v=2.x gives v2.71 “current”
v2.72 next
v2.73 latest

轻松在你blog上显示Google Maps地图

想轻松地使用Google Maps API还真不是一件简单的事情,对大多数人来说还是具有一定难度的。正如Google Maps API文档里说的那样,Google Maps API是为熟悉JavaScript的人准备的。不过现在wikimapia.org提供了一个可以简单搞定Google Maps API的方法:在wikimapia上定位并缩放到合适比例,选择显示区域大小,拷贝wikimapia提供给你的html代码,加入你的网页,ok。
其实道理也很简单,wikimapia直接调用了Google Maps的图象,使其在框架里显示并指定框架显示大小。
缺点:只有显示Google Maps地图的单一功能,不能使用添加标记、文字等等其他高级功能。
你可以简单地试验下:在桌面上新建test.txt文本文档,拷贝下面的代码,保存,修改文件名为test.htm,打开。

<iframe src=http://wikimapia.org/s/#y=29898782&x=121935410&z=17&l=6&m=a width=415 height=365 frameborder=0></iframe>

Body.onload 关于页面加载完毕的问题

由于上午的Gmap没有调试成功,一直比较郁闷。
1、下午的时候收到K_Reverter的邮件他告诉我可以用window.onload=func的方法来代替Body.onload使用。
2、上网找了点资料,在360doc看到了一个老外关于window.onload的代码,也拿过来用下。
修改代码如下:

<script type=”text/javascript” src=”http://maps.google.com/maps?file=api&v=2&key=ABQIAAAA43IALmfadaZgVb1L-IEizRRKyzQqj4F9myd02mWX0DutlkqY_BQi03TATJA59RMvJYUa4fN7lK7X5g”>
</script>

<div id=”map” style=”width: 600px; height: 400px;”></div>

<script type=”text/javascript”>
function init() {
if (GBrowserIsCompatible()) {
var map=new GMap(document.getElementById(“map”));
map.addControl(new GSmallMapControl());
map.addControl(new GMapTypeControl());
map.setMapType(G_HYBRID_TYPE);
map.centerAndZoom(new GPoint(121.5581,29.8394), 8);
// Create a base icon for all of our markers that specifies the
// shadow, icon dimensions, etc.
var baseIcon = new GIcon();
baseIcon.shadow = “http://www.google.com/mapfiles/shadow50.png”;
baseIcon.iconSize = new GSize(20, 34);
baseIcon.shadowSize = new GSize(37, 34);
baseIcon.iconAnchor = new GPoint(9, 34);
baseIcon.infoWindowAnchor = new GPoint(9, 2);
baseIcon.infoShadowAnchor = new GPoint(18, 25);

// Create a lettered icon for this point using our icon class
var letter = String.fromCharCode(“A”.charCodeAt(0) + 25);
var icon = new GIcon(baseIcon);
icon.image = “http://www.google.com/mapfiles/marker” + letter + “.png”;
var ningbo = new GMarker(new GPoint(121.5581,29.83941),icon);
GEvent.addListener(ningbo, “click”, function(){
ningbo.openInfoWindowHtml(“过几天出去溜达下!”); });
map.addOverlay(ningbo);

// Create a lettered icon for this point using our icon class
var letter = String.fromCharCode(“A”.charCodeAt(0) + 24);
var icon = new GIcon(baseIcon);
icon.image = “http://www.google.com/mapfiles/marker” + letter + “.png”;
var zhoushan = new GMarker(new GPoint(122.1018,30.0207),icon);
GEvent.addListener(zhoushan, “click”, function(){
zhoushan.openInfoWindowHtml(“你说什么啊?我听不见呀!”);
});
map.addOverlay(zhoushan);
}
};

/* for Mozilla */
if (document.addEventListener) {
document.addEventListener(“DOMContentLoaded”, init, null);
}

/* for Internet Explorer */
/*@cc_on @*/
/*@if (@_win32)
init
/*@end @*/

/* for other browsers */
window.onload = init;
</script>

update:
1、加载比较慢,请耐心等待片刻,页面里有太多的脚本了,嘿嘿。看来玩Gmap还得有个自己的空间才是!
2、在2个GMarker之间点击的时候先打开的openInfoWindow不能自由关闭,看来还要继续除虫。

Gmap

用Gmap api做了张地图,可是发现一个问题,在firefox下显示正常,在ie下浏览器会重置,调试了半天,也没搞定,先发了再说。代码如下:
代码开始

<script type=”text/javascript” src=”http://maps.google.com/maps?file=api&v=2&key=ABQIAAAA43IALmfadaZgVb1L-IEizRT2DsZWTaQwEcLbsDtQz1jnLAblVRRx2_bEwFhsxfHsq9k-5A0PT7xjxw”>
</script>

<div id=”map” style=”width: 600px; height: 400px;”></div>

<script type=”text/javascript”>
//<![CDATA[
if (GBrowserIsCompatible()) {

var map=new GMap(document.getElementById(“map”));
map.addControl(new GSmallMapControl());
map.addControl(new GMapTypeControl());
map.setMapType(G_HYBRID_TYPE);
map.centerAndZoom(new GPoint(121.5581,29.8394), 8);

// Create a base icon for all of our markers that specifies the
// shadow, icon dimensions, etc.
var baseIcon = new GIcon();
baseIcon.shadow = “http://www.google.com/mapfiles/shadow50.png”;
baseIcon.iconSize = new GSize(20, 34);
baseIcon.shadowSize = new GSize(37, 34);
baseIcon.iconAnchor = new GPoint(9, 34);
baseIcon.infoWindowAnchor = new GPoint(9, 2);
baseIcon.infoShadowAnchor = new GPoint(18, 25);

// Create a lettered icon for this point using our icon class
var letter = String.fromCharCode(“A”.charCodeAt(0) + 25);
var icon0 = new GIcon(baseIcon);
icon0.image = “http://www.google.com/mapfiles/marker” + letter + “.png”;

var ningbo = new GMarker(new GPoint(121.5581,29.83941),icon0);
GEvent.addListener(ningbo, “click”, function(){
ningbo.openInfoWindowHtml(“美女啊,我爱你啦!”);
});
map.addOverlay(ningbo);

// Create a lettered icon for this point using our icon class
var letter = String.fromCharCode(“A”.charCodeAt(0) + 24);
var icon = new GIcon(baseIcon);
icon.image = “http://www.google.com/mapfiles/marker” + letter + “.png”;

var zhoushan = new GMarker(new GPoint(122.1018,30.0207),icon);
GEvent.addListener(zhoushan, “click”, function(){
zhoushan.openInfoWindowHtml(“你说什么啊?我饭吃过啦!”);
});
map.addOverlay(zhoushan);

}
//]]>
</script>

代码结束

google的api文挡里面的实例使用了

  <body onload="load()" onunload="GUnload()">
<div id="map" style="width: 500px; height: 300px"></div>
</body>

我估计错误就出现在这个地方,donews的模板我好象设置不了body onload。