2012-11-28 3 views
2

비영리 단체를 위해 FAFSA를 작성하고 맞춤 마커 이미지가있는 Google지도에 올려 놓을 위치 데이터베이스를 만들려고합니다. 위장자가 마커를 표시하는 것 같습니다.Google 자습서의 마커 문제 "Google지도에서 PHP/MySQL 사용"

여기
<?php 
require("mapdbinfo.php"); 

// Start XML file, create parent node 
$dom = new DOMDocument("1.0"); 
$node = $dom->createElement("markers"); 
$parnode = $dom->appendChild($node); 

// Opens a connection to a mySQL server 
$connection=mysql_connect ("Localhost", $username, $password); 
if (!$connection) { die("Not connected : " . mysql_error());} 

// Set the active mySQL database 
$db_selected = mysql_select_db($database, $connection); 
if (!$db_selected) { die("Can\'t use db : " . mysql_error());} 

$query = "SELECT * FROM locations WHERE 1"; 
$result = mysql_query($query); 
if (!$result) { die("Invalid query: " . mysql_error());} 

header("Content-type: text/xml"); 

// Iterate through the rows, adding XML nodes for each 
while ($row = mysql_fetch_assoc($result)){ 
    // Add to XML document node 
    $node = $dom->createElement("marker"); 
    $newnode = $parnode->appendChild($node); 

    $newnode->setAttribute("name",$row['name']); 
    $newnode->setAttribute("address", $row['address']); 
    $newnode->setAttribute("lat", $row['lat']); 
    $newnode->setAttribute("lng", $row['lng']); 
    $newnode->setAttribute("type", $row['type']); 
    $newnode->setAttribute("date", $row['date']); 
    $newnode->setAttribute("cord", $row['cord']); 
    $newnode->setAttribute("cord_info", $row['cord_info']); 
} 

echo $dom->saveXML(); 
?> 

는 자바 스크립트 :

function load() { 
var location_icon = new google.maps.MarkerImage('images/FAFSA_Logo_icon.png'); 
var map = new google.maps.Map(document.getElementById("map"), { 
    center: new google.maps.LatLng(35.105305, -106.628014), 
    zoom: 9, 
    mapTypeId: 'roadmap' 
    }); 
    var infoWindow = new google.maps.InfoWindow; 
    } 

downloadUrl("mapmysql.php", function(data) { 
var xml = data.responseXML; 
var markers = xml.documentElement.getElementsByTagName("marker"); 
for (var i = 0; i < markers.length; i++) { 
var name = markers[i].getAttribute("name"); 
var address = markers[i].getAttribute("address"); 
var type = markers[i].getAttribute("type"); 
var point = new google.maps.LatLng(
    parseFloat(markers[i].getAttribute("lat")), 
    parseFloat(markers[i].getAttribute("lng"))); 
var html = "<b>" + name + "</b> <br/>" + address + "<b> Cordinator </b>" + cord + cord_info; 
var icon = location_icon; 
var marker = new google.maps.Marker({ 
    map: map, 
    position: point, 
    icon: icon  
}); 
bindInfoWindow(marker, map, infoWindow, html); 
} 
}); 

function bindInfoWindow(marker, map, infoWindow, html) { 
    google.maps.event.addListener(marker, 'click', function() { 
    infoWindow.setContent(html); 
    infoWindow.open(map, marker); 
    }); 
} 

function downloadUrl(url,callback) { 
var request = window.ActiveXObject ? 
    new ActiveXObject('Microsoft.XMLHTTP') : 
    new XMLHttpRequest; 

request.onreadystatechange = function() { 
    if (request.readyState == 4) { 
    request.onreadystatechange = doNothing; 
    callback(request, request.status); 
    } 
}; 

request.open('GET', url, true); 
request.send(null); 
}  

그들이 마커가 표시되지 않는 이유를 알아낼 수 없습니다 여기

는 XML을 생성하는 PHP입니다. 파일은 해당 이미지 폴더에 있지만, 현재의 지식으로 효과적으로 문제를 해결할 수없는 곳이 여러 곳 있습니다. 나는 꽤 많이 복사하고 XML에서 끌어 오기 몇 가지 필드를 추가하는 것을 제외하고 Google 예제에서 코드를 붙여 넣은 사용자 지정 아이콘 이미지를 추가했습니다.

이러한 마커를 표시하는 방법에 대한 아이디어가 있으십니까? 맵은 선택된 마커와 센터로 표시됩니다.

답변

0

은 내가 (나는 잠시 그들에게 얻을 것이다) 몇 가지 문제를 볼 수 있습니다 생각하지만, 먼저 좀 더 일반적인 디버깅 조언을 제공하려고하는거야 -

테스트 사람의 코드에 의존 서버 측 코드는 비록 자신의 코드 일지라도 꽤 까다 롭습니다. 이와 같은 경우에 가장 먼저 할 일은 구문 분석 할 일반 XML 파일을 만들어 페이지에 포함시키는 것입니다. 그런 다음 문제가 발생하면 코드의지도 렌더링 부분에 버그가 발생했는지 알 수 있습니다. 작동하는 경우 버그를 서버 또는 서버에서 가져 오는 데 사용하는 코드로 좁힐 수 있습니다.

다음으로 xml 파일을 서버에 그대로두고 클라이언트 측 파일 다운로드가 작동하는지 확인하려고합니다. 나는 이것이 당신이 최소한 하나의 오류를 발견 한 곳이라고 생각합니다. 현재 맵 렌더링은 두 단계로 나뉩니다. "로드"기능은지도를 초기화합니다. 마커 데이터를 얻기 위해 의존하고있는 "downloadURL"함수에 대한 호출이 필요합니다.

문제는 통화를 구성하는 방법에 있습니다. "load"에서 생성 한 "map"변수는 자체적으로 "로드"하기위한 로컬 변수입니다. 당신은 그것의 외부에 그것을 접근 할 수 없다. 이 특정 문제를 해결할 수있는 두 가지 방법이 있습니다.지도를 전역 변수로 바꾸거나지도를 조작하는 모든 코드를 '로드'내에 추가 할 수 있습니다. 당신이 이전을하고자하는 경우, 당신은이 작업을 수행 :

이, 전역에 "지도"는 "로드"의 외부에서 사용할 수 있도록 추가
var map; 
function load() { 
    var location_icon = new google.maps.MarkerImage('images/FAFSA_Logo_icon.png'); 
    map = new google.maps.Map(document.getElementById("map"), { 
    center: new google.maps.LatLng(35.105305, -106.628014), 
    zoom: 9, 
    mapTypeId: 'roadmap' 
    }); 
    var infoWindow = new google.maps.InfoWindow; 
} 

.

그러나이 상태 그대로 유지하는 데는 여전히 문제가 있습니다. "downloadURL"이지도를 조작하기 시작할 때까지 "load"가지도를 초기화했다는 것을 보장하지 않습니다. '로드'가 먼저지도를 만들 기회가 오기 전에 '지도에'마커를 추가하려고 시도 할 수 있습니다. 다행히,이과 같이, "로드"내 "downloadURL"전화를 넣어 해결할 수 있습니다

function load() { 
    var location_icon = new google.maps.MarkerImage('images/FAFSA_Logo_icon.png'); 
    var map = new google.maps.Map(document.getElementById("map"), { 
    center: new google.maps.LatLng(35.105305, -106.628014), 
    zoom: 9, 
    mapTypeId: 'roadmap' 
    }); 
    var infoWindow = new google.maps.InfoWindow; 

    downloadUrl("mapmysql.php", function(data) { 
    var xml = data.responseXML; 
    var markers = xml.documentElement.getElementsByTagName("marker"); 
    for(var i = 0; i < markers.length; i++) { 
     var name = markers[i].getAttribute("name"); 
     var address = markers[i].getAttribute("address"); 
     var type = markers[i].getAttribute("type"); 
     var point = new google.maps.LatLng(
     parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng"))); 
     var html = "<b>" + name + "</b> <br/>" + address + "<b> Cordinator </b>" + cord + cord_info; 
     var icon = location_icon; 
     var marker = new google.maps.Marker({ 
     map: map, 
     position: point, 
     icon: icon 
     }); 
     bindInfoWindow(marker, map, infoWindow, html); 
    } 
    }); 
} 

이지도를 만든 후에 마커는지도에 추가 할 것을 보장하고, 그들이 있음 처음부터지도에 액세스 할 수 있습니다.

+0

감사의 거품! "load"외부에 "map"을 초기화 한 다음 "load"내부에 "downloadUrl"을 넣으면이 문제가 해결 된 것 같습니다. 이것에 대한 튜토리얼에 의견을 남기 겠지만 그렇게 할 방법이 없다고 생각합니다. 나는 또한 안전한 측면에있는 모든 것의 외부에서 "location_icon"을 초기화했습니다. – Bryan

+0

여러분을 환영합니다! 이 자습서에 대한 링크가 있습니까? 나는 좀 궁금해. – Bubbles

+0

https://developers.google.com/maps/articles/phpsqlajax_v3은 이에 대한 자습서에 대한 링크입니다. – Bryan

0
  1. 확인 오류
  2. 에 대한 자바 스크립트 콘솔은 XML을 확인합니다. 브라우저가 유효하다고 생각하는지 확인하십시오.
  3. 디버거를 사용 (또는 경고를 추가)는 마커 XML을 구문 분석지도에서, 루프이 처리되고있는 마커 변수의 길이가 올바른지 확인하십시오

    에 대한

    (VAR를 I = 0; I < markers.length; 내가 ++) {위의

하나는 문제를 지적한다. 그렇지 않은 경우 실시간지도에 대한 링크를 게시하면 다른 사람이 알아낼 수 있습니다.

+0

감사합니다. geocodezip. 나는 변수에 몇 가지 오류가 있음을 알기 위해 크롬 콘솔을 사용했다. 나는 당신의 의견 앞에서 그런 생각을하지 못했습니다. – Bryan

관련 문제