0

我正在尝试在谷歌(或必应)地图上查明位置,但我无法在两者中都这样做。两者的代码结构相似,我提出了谷歌地图的尝试:

目标:我有一个对象的链接列表,每个对象都包含纬度和经度,所有这些都必须精确定位。

完整的 ASP: http: //pastie.org/7752124(转发器是为了呈现搜索结果)

相关(在头部):

<script type="text/javascript">
    var map = null;
    function initialize() {
        var mapOptions = {
            center: new google.maps.LatLng(40.42, -98.737),
            zoom: 4,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        map = new google.maps.Map(document.getElementById("map-canvas"),
        mapOptions);
        //pushPin(25, 80);
    }
    function pushPin(lat, lon) {
        alert(lat + " " + lon);
        var myLatlng = new google.maps.LatLng(lat, lon);
        var marker = new google.maps.Marker({
            position: myLatlng,
            map: map,
            title: "Hello World!"
        });
    }
    google.maps.event.addDomListener(window, 'load', initialize);
</script>

代码隐藏:当用户单击搜索按钮时激活:

protected void Button1_Click(object sender, EventArgs e)
    {
        List<Results> rlist = getResults(query);
        String Locations = "";
        foreach (Results res in rlist)
        {
            Page.ClientScript.RegisterStartupScript(
                GetType(),
                "MyKey",
                "pushPin("+res.latitude+","+res.longitude+");",
                true);
        }
        this.rptREsults.DataSource = rlist;
        this.rptREsults.DataBind();
    }

public class Results
{
    public string filename { get; set; }
    public string asciiname { get; set; }
    public string latitude { get; set; }
    public string longitude { get; set; }
}

结果是正确的并且确实包含纬度和经度,当我在 pushPin 方法中放置警报时,只有一个警报框出现,但没有创建精确定位。有没有更好的方法来存储和精确定位纬度和经度列表?

当我从另一个 javascript 方法调用 pushPin 方法时,它可以工作。

4

1 回答 1

0

我倾向于这样做,这是我在另一个网站上使用的一些代码的精简版本/示例,但应该给你足够的东西让事情正常工作:

var markers = new Array();
var markerLatLongs = new Array();
var sites = // JSON formatted version of your Results object(s)

function initialize() {
    var mapOptions = {
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map(document.getElementById('map'),
        mapOptions);


    createMarkers();
}

function createMarkers() {
    for (var j = 0; j < sites.length; j++)
    {
        markerLatLongs[j] = new google.maps.LatLng(sites.latitude ,sites.longitude )
        markers[j] = new google.maps.Marker({
            position: markerLatLongs[j],
            map: map,
            title: sites[j].siteName
        });    
    }
}

为了解决计时问题,在另一个函数中调用 pushPin,然后从初始化中添加对函数包装器的调用,如下所示:

protected void Button1_Click(object sender, EventArgs e)
    {
        List<Results> rlist = getResults(query);
        String Locations = "";
        StringBuilder pushPinCalls = new StringBuilder();
        foreach (Results res in rlist)
        {
          pushPinCalls.AppendFormat("pushPin({0},{1});",res.latitude,res.longitude);
        }
            Page.ClientScript.RegisterStartupScript(
                GetType(),
                "MyKey",
                string.Format("function pushPinManager() {{0}}",pushPinCalls.ToString());,
                true);
        this.rptREsults.DataSource = rlist;
        this.rptREsults.DataBind();
    }

在js中:

function initialize() {
    var mapOptions = {
        center: new google.maps.LatLng(40.42, -98.737),
        zoom: 4,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map(document.getElementById("map-canvas"),
    mapOptions);
    pushPinManager();
}
于 2013-05-02T10:53:49.173 回答