2013-05-02 149 views
0

我正在努力查明谷歌(或Bing)地图上的位置,而且我无法在两者中都这样做。代码结构在两者中都是相似的,并且我呈现Google地图尝试:在谷歌地图上使用ASP.NET精确定位位置

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

完整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方法中放置警报时,只有一个警报框出现,b没有创建精确点。有没有更好的方法来存储和精确定位纬度和经度列表?

pushPin方法在我从另一个JavaScript方法调用它时起作用。

+0

我添加了一个可能的解决方案,我的答案可能会解决您的问题。 – bUKaneer 2013-05-02 20:28:25

回答

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 
     });  
    } 
} 

为了解决说唱你的电话到图钉在另一个函数计时问题,则调用上增添功能包装中的初始化是这样的:

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(); 
} 
+0

谢谢bUKaneer!但我认为问题在于,pushPin映射为null时,我称之为。和我一样,从我的代码中调用pushPin的时候,init还没有发生。任何方法来解决这个问题? – orderof1 2013-05-02 18:33:21

+0

我添加了一个可能的解决方案,我的答案可能会解决您的问题。 – bUKaneer 2013-05-02 20:28:03