구글지도 최신글 뽑아오는것에 대하여 보충 질문드립니다.
본문
아래 구글지도 최신글 뽑아오는 질문에 대하여 설명이 부족한것 같아 다시 글 올립니다. ㅠㅠ
답변 꼭 부탁드릴께요..ㅠㅠ
구글지도에 표기된것을 최신글로 뽑아오는 스킨을 사용하고 있습니다. (아빠사랑님 제작 스킨입니다.)
위의 스킨 내용을 살짝 바꾸어 봤습니다.
<script src="https://maps.googleapis.com/maps/api/js?sensor=false&language=ko"></script>
<script type="text/javascript">
var pointicon = {url:'<?php G5_URL ?>/img/yeicon_map001.gif',
};
var yeLatlng = new google.maps.LatLng(37.549205,126.999207);
var yemapOptions = {
zoom: 10,
center: yeLatlng,
mapTypeControl: true,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.DEFAULT
},
zoomControl: true,
zoomControlOptions: {
style: google.maps.ZoomControlStyle.DEFAULT
},
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById('yemap'), yemapOptions);
var geocoder = new google.maps.Geocoder();
var infowindow = new google.maps.InfoWindow({ maxWidth: 400 });
var mathaenge;
<?php for ($i=0; $i<count($list); $i++) {
$name1=strip_tags($list[$i]['wr_subject']);
$url="<a href={$list[$i][href]}><b>$name1</b></a>";
$address=$list[$i]['wr_6'];
?>
geocoder.geocode( { 'address': '<?php echo $address;?>'}, function(results, status) {
map.setCenter(results[0].geometry.location);
var marker = new google.maps.Marker({
position: results[0].geometry.location,
map: map,
icon: pointicon
});
google.maps.event.addListener(marker, 'click', (function(marker, mathaenge){
return function() {
infowindow.setContent('<?php echo $url;?>');
infowindow.open(map, marker);
}
})(marker, mathaenge));
});
<? } ?>
</script>
위 내용으로 최신글을 만들어 놓았습니다.
해당 게시판의 구글 지도 주소를 wr_6 으로 입력되게 하였고 그 값을 최신글로 불러오도록 하고 싶었습니다.
해당 게시판의 구글 지도 입력 코드 입니다. (주소입력부분은 해피정님의 팁을 활용하였습니다.)
위의 내용대로 게시판에서 내용을 작성하고 메인에서 최신글을 뽑으면..
잘 나옵니다.
여기서 질문드려요..ㅠㅠ
최신글로 뽑아오는 개수가 11개가 넘어가면..(11개까지는 오류가 안나고 잘 나옵니다.) 12개째부터 오류가 발생합니다.
=> 메시지: '0'은(는) null 이거나 개체가 아닙니다.
또한 12개 이상은 출력되지 않습니다.
이유가 무엇일까요..ㅠㅠ
갔다가 붙여쓰는 재주밖에 없고..공부가 부족한지라..무엇이 잘못된지 모르겠습니다.
게시판에서 잘 입력되었고..DB쪽에도 값이 잘 입력된것을 확인하였고..
최신글 화면에서 소스를 보면..소스상에서는 순서대로 잘 나타나있는데..
화면에서는 오류발생과 11개까지 마커가 출력되지 않으니 답답합니다.ㅠㅠ
인터넷 검색, 그누보드 게시판 다 뒤져 보았지만 그래도 모르겠습니다. ㅠㅠ
답변 부탁드리겠습니다.
답변 2
해당게시판의 주소입력 해당 코드입니다. (내용에 첨부가 다 안되서 댓글로 남깁니다.;;)
<!--지도-->
<?php
if ($write['wr_9']=='') $write['wr_9']='37.566535';
if ($write['wr_10']=='') $write['wr_10']='126.977969';
?>
<script src="https://maps.googleapis.com/maps/api/js?sensor=false&language=ko"></script>
<script type="text/javascript">
// 구글지도
var map;
var geocoder;
var centerChangedLast;
var reverseGeocodedLast;
var currentReverseGeocodeResponse;
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function() {
if (oldonload) {
oldonload();
}
func();
}
}
}
function initialize() {
var latlng = new google.maps.LatLng(<?php echo $write['wr_9']?>,<?php echo $write['wr_10']?>);
var myOptions = {
zoom: 12,
scaleControl: true,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
geocoder = new google.maps.Geocoder();
// 리스너 Listener ////////////////////////////////////////////////////
google.maps.event.addListener(map, 'zoom_changed', function() {
document.getElementById("zoom_level").innerHTML = map.getZoom();
zoomLevel = map.getZoom();
if (zoomLevel > 19) {
map.setZoom(19);
}
if (zoomLevel < 1) {
map.setZoom(1);
}
});
setupEvents();
centerChanged();
}
function setupEvents() {
reverseGeocodedLast = new Date();
centerChangedLast = new Date();
setInterval(function() {
if((new Date()).getSeconds() - centerChangedLast.getSeconds() > 1) {
if(reverseGeocodedLast.getTime() < centerChangedLast.getTime())
reverseGeocode();
}
}, 1000);
google.maps.event.addListener(map, 'center_changed', centerChanged);
google.maps.event.addDomListener(document.getElementById('crosshair'),'dblclick', function() {
map.setZoom(map.getZoom() + 1);
});
}
function getCenterLatLngText() {
var nn = 1000000;
var tmpLat = Math.round(map.getCenter().lat()*nn)/nn;
var tmpLng = Math.round(map.getCenter().lng()*nn)/nn;
document.fwrite.wr_9.value = tmpLat;
document.fwrite.wr_10.value = tmpLng;
return tmpLat +', '+ tmpLng;
}
function centerChanged() {
centerChangedLast = new Date();
var latlng = getCenterLatLngText();
var loc = latlng.split(',');
geocoder.geocode({latLng:map.getCenter()},reverseGeocodeResult);
document.getElementById('latlng').innerHTML = latlng;
document.getElementById('formatedAddress').innerHTML = '';
currentReverseGeocodeResponse = null;
}
function reverseGeocode() {
reverseGeocodedLast = new Date();
geocoder.geocode({latLng:map.getCenter()},reverseGeocodeResult);
}
function reverseGeocodeResult(results, status) {
currentReverseGeocodeResponse = results;
if(status == 'OK') {
if(results.length == 0) {
document.getElementById('formatedAddress').innerHTML = 'None';
} else {
document.getElementById('formatedAddress').innerHTML = results[0].formatted_address;
}
} else {
document.getElementById('formatedAddress').innerHTML = 'Error';
}
}
function geocode() {
var address = document.getElementById("address").value;
geocoder.geocode({
'address': address,
'partialmatch': true}, geocodeResult);
}
function geocodeResult(results, status) {
if (status == 'OK' && results.length > 0) {
map.fitBounds(results[0].geometry.viewport);
} else {
alert("Info: " + status);
}
}
</script>
Find Place: <input type="text" id="address" size="40" onKeyDown="if(event.keyCode==13){geocode();}" class="frm_input" />
<input type="button" style = "cursor: pointer;" value=" Go " onclick="geocode()" class="frm_input">
<div id="map">
<div id="map_canvas" style="width:593px; height:300px;"></div>
<div id="crosshair"></div>
</div>
<script type="text/javascript">
addLoadEvent(initialize);
</script>
<table>
<tr><td>Lat/Lng:</td><td><div id="latlng"></div></td></tr>
<tr><td>Address:</td><td><div id="formatedAddress"></div></td></tr>
<tr><td>Zoom:</td><td><div id="zoom_level">12</div></td></tr>
</table>
자문자답입니다.
맞는지는 확실치 않으나, 아래 방법으로 해결했습니다.
지오코딩 자체가 요청수가 한번에 10개까지만 받아들인다고 합니다.
정확한건 아니나, 위도,경도를 직접 변수에 넣으니..
잘 나오게 됩니다. 참고하시길 바랍니다~
답변을 작성하시기 전에 로그인 해주세요.