google map结合数据库加载地图

本文详细介绍了如何使用Google API在地图上动态显示标记,并与数据库结合实现显示实时更新的数据。包括显示标记、点击标记显示提示信息、添加多个标记、结合数据库显示数据、按类别筛选显示不同标记等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近有空看了看google api,所以想着做一个结合数据库动态显示地图标记功能。前几天总算给弄出来了,先看效果图:

Google <wbr>API结合数据库动态显示地图标记和点击提示信息

1、在地图上显示标记
Google <wbr>API结合数据库动态显示地图标记和点击提示信息
首先得加载google的javascript。
<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=false&amp;key=ABQIAAAAVVFzpIll3fltTMQyYMoe_hSmLhMt0u5WYOzXR8D81pMB6TP2XBRIAJCSX7AegzaN337aA6yyfpqS9g&hl=en" type="text/javascript" charset="utf-8"></script>

本地测试可以不需要api key,参数hl是指语言,也可以使用使用默认的。使用sensor参数跟踪使用情况,也可省略。完整代码如下,后面就是在此基础上修改。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Google Map Api </title>

<style>

body {font-size:12px; color:#333; font-family:Tahoma,Verdana,Segoe,sans-serif;}

</style>

</head>

<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=false&amp;key=ABQIAAAAVVFzpIll3fltTMQyYMoe_hSmLhMt0u5WYOzXR8D81pMB6TP2XBRIAJCSX7AegzaN337aA6yyfpqS9g&hl=en" type="text/javascript" charset="utf-8"></script>

<script type="text/javascript">

window.onload = function() {

function createMarker(point) {

var marker = new GMarker(point);

return marker;

}

if (GBrowserIsCompatible()) { //检查兼容性

var map = new GMap2(document.getElementByIdx_x("map_canvas"));

map.setCenter(new GLatLng(22.557246992873218, 113.90215694904327), 15); //设置中心位置

map.addControl(new GLargeMapControl());

map.enableScrollWheelZoom();

//标记自己

var latlng = new GLatLng(22.557246992873218, 113.90215694904327);

map.addOverlay(createMarker(latlng));

}

}

</script>

<body style="text-align:center;" onunload="GUnload()" >

<div id="d_map" style="background-color:#FFF;border:solid 1px gray;width:750px; margin:50px auto;">

<div style="width:750px; height:500px;background-color:#f3f3f3;" id="map_canvas"></div>

</div>

</body>

</html>

2、实现点击标记出现提示信息窗口功能
Google <wbr>API结合数据库动态显示地图标记和点击提示信息
该功能的实现主要是点击标记的时候,添加了"click"事件的监听器。事件监听器需要调用GEvent.addListener方法。创建一个信息窗口,调用openInfoWindow方法。所以修改createMarker函数。如下:
function createMarker(point,code) {

var marker = new GMarker(point);

GEvent.addListener(marker, "click", function() {

marker.openInfoWindowHtml(code);

});

return marker;

}

同时:map.addOverlay(createMarker(latlng,"我的标记"));这样来传递显示的信息内容,可包含html代码。

到此,我们已实现了显示标记,并且出现提示信息窗口功能。可是我们可能不仅仅只显示一个标记,并且希望能控制这些参数?

3、添加多个标记。
Google <wbr>API结合数据库动态显示地图标记和点击提示信息
添加多个其实很简单。做如下修改就可以。
//标记自己

var latlng = new GLatLng(22.557246992873218, 113.90215694904327);

map.addOverlay(createMarker(latlng,"我的标记1"));

var latlng = new GLatLng(22.55894272371135, 113.90369104763574);

map.addOverlay(createMarker(latlng,"我的标记2"));

4、结合数据库。将标记经纬度以及提示信息保存至数据库中。表数据如下
Google <wbr>API结合数据库动态显示地图标记和点击提示信息
1)方法:用GDownloadUrl方法下载一个包含一个经纬度列表的XML文件。当下载完成,我们用GXml类来解析,并为XML文档中的每一个点建立一个标记。
GDownloadUrl("check.asp", function(data, responseCode) {

var xml = GXml.parse(data);

var markers = xml.documentElement.getElementsByTagName_r("marker");

for (var i = 0; i < markers.length; i++) {

var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),   parseFloat(markers[i].getAttribute("lng")));

var pid=markers[i].getAttribute("pid");

map.addOverlay(createMarker(point, pid));

}

});

Google <wbr>API结合数据库动态显示地图标记和点击提示信息
check.asp输出的是一个xml数据类似于:

 


源码如下:
<!--#include file="conn.asp"-->

<%

Response.CodePage = 65001

Response.ExpiresAbsolute = Now() - 1

Response.Expires = 0

Response.CacheControl = "no-cache"

Response.AddHeader "Pragma", "No-Cache"

Response.ContentType="text/xml"

Response.Charset="utf-8"

sql="select * from db_product"

set rs=server.createobject("adodb.recordset")

rs.open sql,conn,1,1

if not rs.eof and not rs.bof then

  response.write "<markers>"

  do while not rs.eof

  response.write "<marker lat="""&rs("lat")&""" lng="""&rs("lng")&""" pid="""&rs("id")&""" />"

  rs.movenext

  loop

  response.write "</markers>"

end if

rs.close

set rs=nothing

%>

2)需要注意的是上面提示的信息是各条记录的id,你也可以直接提示为描述(字段pname)。我这里做是因为我还想当我点击的时候能够再一次通过这个id来调用数据库中的数据,这以后也许有用,比如可通过这个id查询其他与其相关的数据,做成列表等等。这里我需要处理的就是标记click的监听事件。

进一步修改:

原:

GEvent.addListener(marker, "click", function() {

marker.openInfoWindowHtml(code);

});

修改为:

GEvent.addListener(marker, "click", function() {

GDownloadUrl("show.asp?pid="+code, function(data, responseCode) {marker.openInfoWindowHtml(data);});

});//这里的code得到就是传递过来的pid

show.asp就是接收pid然后做相关的处理。我这里是输出描述(字段pname)
源码如下:

<!--#include file="conn.asp"-->

<%

Response.CodePage = 65001

Response.ExpiresAbsolute = Now() - 1

Response.Expires = 0

Response.CacheControl = "no-cache"

Response.AddHeader "Pragma", "No-Cache"

Response.ContentType="text/xml"

Response.Charset="utf-8"

pid=request("pid")

sql="select * from db_product where id="&pid

set rs=server.createobject("adodb.recordset")

rs.open sql,conn,1,1

if not rs.eof and not rs.bof then

  response.Write rs("pname")

end if

rs.close

set rs=nothing

%>

 

5、进一步增加功能,改变条件显示不同的标记。也就是最终的结果,如本文最开始的效果图。

添加一个div,一个select:

<div id="str">

<select id="categoryid" name="categoryid" onChange="change(this.options[this.selectedIndex].value);">

<option value="">所有类别</option>

<option value="1">类别1</option>

<option value="2">类别2</option>

<option value="3">类别3</option>

</select>

</div>

相关函数如下:

function change(categoryid){

var map = new GMap2(document.getElementByIdx_x("map_canvas"));

map.setCenter(new GLatLng(22.557246992873218, 113.90215694904327), 15);

map.addControl(new GLargeMapControl());

map.enableScrollWheelZoom();

GDownloadUrl("check.asp?categoryid="+categoryid, function(data, responseCode) {

var xml = GXml.parse(data);

var markers = xml.documentElement.getElementsByTagName_r("marker");

for (var i = 0; i < markers.length; i++) {

var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),

parseFloat(markers[i].getAttribute("lng")));

var pid=markers[i].getAttribute("pid");

map.addOverlay(createMarker1(point,pid)); //不知道为何用原createMarker就出错。

}

});

}

function createMarker1(point, code) {

var marker = new GMarker(point);

GEvent.addListener(marker, "click", function() {

GDownloadUrl("show.asp?pid="+code, function(data, responseCode) {marker.openInfoWindowHtml(data);});

});

return marker;

}

PS:以上js有很多重复的,应该是可以精简的。
Google api:http://www.codechina.org/doc/google/gmapapi/

如果放网上需要自己去去申请key。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值