求一个关于谷歌地图的问题!!必结贴!

encienqi 2009-10-11 11:08:10
描述:主要是想从数据库中动态读出坐标,然后显示到谷歌地图中
现在程序可以显示写死的点,可以读出数据库中的坐标,但是就是无法将读出的坐标显示在地图上!

程序如下:
前台代码

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>

<!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 id="Head1" runat="server">
<title>Untitled Page</title>
<script type="text/javascript">

<%=GetRootIDArray() %>;
</script>
</head>
<body onload="initialize()" onunload="GUnload()">
<script src="http://ditu.google.cn/maps?file=api&v=2&key=abcdefg&sensor=true_or_false"
type="text/javascript"></script>

<div id="map" style="width: 700px; height: 450px" align="center"></div>
<script src="js/test.js" type="text/javascript" ></script>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

</body>
</html>


后台C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Web.UI.HtmlControls;

public partial class Default2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}
protected string GetRootIDArray()
{
SqlConnection conn = MyDB.GetConn();
SqlCommand cmd = new SqlCommand("select jingdu, weidu from jiamengshang", conn);
SqlDataAdapter adp = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
adp.Fill(ds);
System.Text.StringBuilder text = new System.Text.StringBuilder();
if (ds.Tables.Count > 0)
{

for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
text.AppendFormat("jingxiaoshang[ {0} ] = new Array('{1}','{2}');", i.ToString(), ds.Tables[0].Rows[i]["jingdu"].ToString(), ds.Tables[0].Rows[i]["weidu"].ToString());
}
}
Label1.Text = text.ToString();
return text.ToString();

}
}


test.js代码

var jingxiaoshang = new Array();

var map = new GMap2(document.getElementById("map"));
//添加一个控制条
map.addControl(new GSmallMapControl());

//配置中心点经纬度(青海)和缩放系数,并显示
map.setCenter(new GLatLng(35.66, 96.74), 6);
//var jingxiaoshang = new Array();


for (i = 0; i < jingxiaoshang.length; i++) {
var temp = point + i;
temp = new GLatlng(jingxiaoshang[i][0], jingxiaoshang[i][1]);
map.addOverlay(createMarker(temp, i));
}

//var point2 = new GLatLng(36.56, 101.74);
//map.addOverlay(createMarker(point2, 2));

//上面这两句是可以设置点,createMarker后面的1可以设置成超连接或者显示东西
//根据数据库里的数据循环输出上面这两句话就可以了,输出所有点


function createMarker(point, number) {
var marker = new GMarker(point);
GEvent.addListener(marker, "click", function() {
marker.openInfoWindowHtml("xining<b>" + number + "</b>");
});
return marker;
}
//这个函数是输出点击那个点之后出来,输出的内容。


数据库代码

USE [binge]
GO
/****** 对象: Table [dbo].[jiamengshang] 脚本日期: 10/11/2009 23:06:52 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[jiamengshang](
[jiamengshangId] [int] NULL,
[bianhao] [varchar](10) NULL,
[sheng] [varchar](10) NULL,
[shi] [varchar](10) NULL,
[wangwangId] [varchar](10) NULL,
[QQId] [varchar](10) NULL,
[website] [varchar](10) NULL,
[dizhi] [varchar](10) NULL,
[jingdu] [varchar](10) NULL,
[weidu] [varchar](10) NULL
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF

insert jiamengshang (jiamengshangId,bianhao,sheng,shi,wangwangId,QQId,website,dizhi,jingdu,weidu) values ( 1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'36.08','101.09')
insert jiamengshang (jiamengshangId,bianhao,sheng,shi,wangwangId,QQId,website,dizhi,jingdu,weidu) values ( 2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'36.18','101.19')
...全文
360 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
gwfmqq 2010-06-29
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 chinmo 的回复:]
虽然说你在后台定义了jingxiaoshang
但是你前台一new就没了都
[/Quote]我靠,装内行,到现在才看出来,什么水平
  • 打赏
  • 举报
回复
换类型,坐标应该是数字,非字符串
encienqi 2009-10-13
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 chinmo 的回复:]
你右键查看你的HTML源代码吧
肯定没值
[/Quote]

10楼的就是右键查HTML代码后的结果~
encienqi 2009-10-13
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 chinmo 的回复:]
虽然说你在后台定义了jingxiaoshang
但是你前台一new就没了都
[/Quote]
<script type="text/javascript"> var jingxiaoshang = new Array(); jingxiaoshang[0] = new Array('36.08','101.09');jingxiaoshang[1] = new Array('36.18','101.19'); </script>

已经读出来了呀,而且用alert(jingxiaoshang[0][0]);可以谈出对应的数据呀
  • 打赏
  • 举报
回复
虽然说你在后台定义了jingxiaoshang
但是你前台一new就没了都
  • 打赏
  • 举报
回复
你如何读出坐标的?没看到
gkw521 2009-10-12
  • 打赏
  • 举报
回复
很复杂的样子。。
cooledit2730 2009-10-12
  • 打赏
  • 举报
回复

function showAddress(address) {
if (geocoder && !big) {
geocoder.getLatLng(
address,
function(point) {
if (!point) {
alert("不能解析: " + address);
} else {
var marker = new GMarker(point);
map.addOverlay(marker);
map.setCenter(point, 13);
}
}
);
}
}
大川101 2009-10-12
  • 打赏
  • 举报
回复
学习,帮顶!!!
encienqi 2009-10-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mrshelly 的回复:]
test.js 中你把
var jingxiaoshang = new Array();
jingxiaoshang 重置了...


你应该把 var jingxiaoshang = new Array();

这句写到上面的 <script 里面去....

仔细看你生成的HTML代码吧...
[/Quote]
你好,加在里面也不行呀~
encienqi 2009-10-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 chinmo 的回复:]
你如何读出坐标的?没看到
[/Quote]

protected string GetRootIDArray()
{
SqlConnection conn = MyDB.GetConn();
SqlCommand cmd = new SqlCommand("select jingdu, weidu from jiamengshang", conn);
SqlDataAdapter adp = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
adp.Fill(ds);
System.Text.StringBuilder text = new System.Text.StringBuilder();
if (ds.Tables.Count > 0)
{

for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
text.AppendFormat("jingxiaoshang[ {0} ] = new Array('{1}','{2}');", i.ToString(), ds.Tables[0].Rows[i]["jingdu"].ToString(), ds.Tables[0].Rows[i]["weidu"].ToString());
}
}
Label1.Text = text.ToString();
return text.ToString();

}



这个读出坐标,写到jingxiaoshang[]数组中了呀~
24K純帥 2009-10-12
  • 打赏
  • 举报
回复
先顶下,有点复杂。。
  • 打赏
  • 举报
回复
你右键查看你的HTML源代码吧
肯定没值
  • 打赏
  • 举报
回复
我还是没看到你在客户端得到坐标值的
encienqi 2009-10-12
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 mrshelly 的回复:]
把你的页面放出来...

你加了.你怎么加的?加了后,运行的结果是什么???
[/Quote]
你好,我把JS代码写在程序里了,然后运行,产生的HTML代码如下:



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>
<head id="Head1"><title>
Untitled Page
</title></head>
<body onload="initialize()" onunload="GUnload()">


<div id="map" style="width: 700px; height: 450px" align="center"></div>
<script src="http://ditu.google.cn/maps?file=api&v=2&key=abcdefg&sensor=true_or_false"
type="text/javascript"></script>
<script type="text/javascript"> var jingxiaoshang = new Array(); jingxiaoshang[0] = new Array('36.08','101.09');jingxiaoshang[1] = new Array('36.18','101.19'); </script>
<script type="text/javascript">

var map = new GMap2(document.getElementById("map"));
//添加一个控制条
map.addControl(new GSmallMapControl());

//配置中心点经纬度(青海)和缩放系数,并显示
map.setCenter(new GLatLng(35.66, 96.74), 6);

for (i = 0; i < jingxiaoshang.length; i++) {
map.addOverlay(createMarker(new GLatlng(jingxiaoshang[i][0], jingxiaoshang[i][1]), i + 1));
}

// var point2 = new GLatLng(36.56, 101.74);
// map.addOverlay(createMarker(point2, 2));

//上面这两句是可以设置点,createMarker后面的1可以设置成超连接或者显示东西
//根据数据库里的数据循环输出上面这两句话就可以了,输出所有点


function createMarker(point, number) {
var marker = new GMarker(point);
GEvent.addListener(marker, "click", function() {
marker.openInfoWindowHtml("xining<b>" + number + "</b>");
});
return marker;
}
//这个函数是输出点击那个点之后出来,输出的内容。

</script>


<span id="Label1">jingxiaoshang[0] = new Array('36.08','101.09');jingxiaoshang[1] = new Array('36.18','101.19');</span>

</body>
</html>



运行时关于脚本报2个错误
Line:26
Char:9
Code:0
Error:'GLatlng' 未定义
网址:http://localhost:1531/WebSite3/Default3.aspx

Line:9
Char:1
Code:0
Error:缺少对象
网址:http://localhost:1531/WebSite3/Default3.aspx

我不明白为什么用“ map.addOverlay(createMarker(new GLatlng(jingxiaoshang[i][0], jingxiaoshang[i][1]), i + 1));”,从数据库中动态读出就不行。

如果写成
var point2 = new GLatLng(36.56, 101.74);
map.addOverlay(createMarker(point2, 2));
这样,点就可以标记出来。

或者是在程序里给出数组,都可以正常执行,如:
var mycars=new Array(2);
mycars[0]=new Array("35.56","96.97");
mycars[1]=new Array("35.76","97.86");
for (i = 0; i < mycars.length; i++) {

map.addOverlay(createMarker(new GLatLng(mycars[i][0], mycars[i][1]),i+1));
}

就是从数据库读出后,不知为何就执行不了~
mrshelly 2009-10-12
  • 打赏
  • 举报
回复
把你的页面放出来...

你加了.你怎么加的?加了后,运行的结果是什么???
encienqi 2009-10-12
  • 打赏
  • 举报
回复
求助中~~~~~
mrshelly 2009-10-12
  • 打赏
  • 举报
回复
test.js 中你把
var jingxiaoshang = new Array();
jingxiaoshang 重置了...



你应该把 var jingxiaoshang = new Array();

这句写到上面的 <script 里面去....

仔细看你生成的HTML代码吧...
MuBeiBei 2009-10-11
  • 打赏
  • 举报
回复
帮你顶下~·不怎么会.net~`

87,901

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧