2013-03-25 1 views
1

JSF 조회를 사용하여 SQL Express 데이터베이스에서 가져온 정보 집합 & 인 일련의 압정으로 Webmatrix2 웹 사이트에 Bing Map (v7)을 표시합니다. .여러 Bing 맵 압핀이 Firefox 및 Chrome에는 표시되지 않지만 IE에서는 수행합니다.

지도는

이 처음입니다 가끔되지만 Ctrl + F5로 새로 고침 경우 특히, 크롬 FF &을에 표시되지 나는 (IE, FF & 크롬)에 압정을 테스트하고있어 3 개 브라우저에 표시되지만 JSON 및 Bing지도 앱에는 몇 가지 실수가있을 것으로 예상됩니다.

코드를 개선하고 표시 일관성을 유지하는 방법에 대한 제안 사항이 있으십니까?

@{ 
    Layout = "~/_MapLayout.cshtml"; 
} 


<script type="text/javascript" src="~/Scripts/jquery-1.9.1.min.js"></script>   
<script type="text/javascript" src="http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=7.0"></script> 
<link rel="StyleSheet" href="infoboxStyles.css" type="text/css"> 
<script type="text/javascript"> 

    var map = null; 
    var pinLayer, pinInfobox; 
    var mouseover; 
    var pushpinFrameHTML = '<div class="infobox"><a class="infobox_close" href="javascript:closeInfobox()"><img src="/Images/close2.jpg" /></a><div class="infobox_content">{content}</div></div><div class="infobox_pointer"><img src="images/pointer_shadow.png"></div>'; 
    var pinLayer = new Microsoft.Maps.EntityCollection(); 
    var infoboxLayer = new Microsoft.Maps.EntityCollection(); 

    function getMap() { 
     map = new Microsoft.Maps.Map(document.getElementById('map'), { 
      credentials: "my-key", 
      zoom: 4, 
      center: new Microsoft.Maps.Location(-25, 135), 
      mapTypeId: Microsoft.Maps.MapTypeId.road 
     }); 
     pinInfobox = new Microsoft.Maps.Infobox(new Microsoft.Maps.Location(0, 0), { visible: false }); 
     AddData(); 

    } 



    $(function AddData() { 
     $.getJSON('/ListSchools', function (data) { 
      var schools = data; 
      $.each(schools, function (index, school) { 
       for (var i = 0; i < schools.length; i++) { 
        var pinLocation = new Microsoft.Maps.Location(school.SchoolLat, school.SchoolLon); 
        var NewPin = new Microsoft.Maps.Pushpin(pinLocation); 

        NewPin.title = school.SchoolName; 
        NewPin.description = "<a href=SchoolDetails?searchschool=" + school.SchoolID + ">-- Learn More --</a>"; 
        pinLayer.push(NewPin); //add pushpin to pinLayer 
        Microsoft.Maps.Events.addHandler(NewPin, 'mouseover', displayInfobox); 
       } 
      }); 
      infoboxLayer.push(pinInfobox); 
      map.entities.push(pinLayer); 
      map.entities.push(infoboxLayer); 
     }); 
    }) 

    function displayInfobox(e) { 
     if (e.targetType == "pushpin") { 
      var pin = e.target; 
      var html = "<span class='infobox_title'>" + pin.title + "</span><br/>" + pin.description; 

      pinInfobox.setOptions({ 
       visible: true, 
       offset: new Microsoft.Maps.Point(-33, 20), 
       htmlContent: pushpinFrameHTML.replace('{content}', html) 
      }); 

      //set location of infobox 
      pinInfobox.setLocation(pin.getLocation()); 
     } 
    } 

    function closeInfobox() { 
     pinInfobox.setOptions({ visible: false }); 
    } 

    function getCurrentLocation() { 
     var geoLocationProvider = new Microsoft.Maps.GeoLocationProvider(map); 
     geoLocationProvider.getCurrentPosition(); 
    } 



    </script> 

<body onload="getMap();"> 
<div id="map" style="position:relative; width:800px; height:600px;"></div> 
    <div> 
     <input type="button" value="Find Nearest Schools" onclick="getCurrentLocation();" /> 
     </div> 
</body> 

는 JSON 파일은 단순히

@{ 
    var db = Database.Open("StarterSite");  
    var sql = @"SELECT * FROM Schools WHERE SchoolLon != ' ' AND SchoolLon != 'null' "; 
    var data = db.Query(sql); 
    Json.Write(data, Response.Output); 
} 

답변

0

이는, addData 함수를 호출하기 전에 pinLayer, 인포 박스 및 infoboxLayer를 추가하고 그 차이가 있는지 확인합니다. 또한 school.SchoolLat 및 school.SchoolLon이 숫자이며 숫자의 문자열 버전이 아닌지 확인하십시오. 문자열 인 경우 parseFloat를 사용하여 숫자로 변환합니다. 그 외에는 모든 것이 잘 보입니다.