geolocation 코드를 사용하는 웹 사이트를 구축 중이며, mapCanvas를로드하고 사용자가 "Finde Me!"를 클릭 한 것으로 가정합니다. 버튼은 자신의 위치를 파악하고 사용자 위치를 기반으로지도의 중심을 설정합니다. 그것은 파이어 폭스, 크롬, 사파리, 정상적인 PC 및 iPhone에서 테스트 한 장치로는 작동하지 않습니다. 안드로이드를 탑재 한 모든 휴대 전화에서만 작동합니다. 코드는 다음과 같습니다.안드로이드 브라우저가 geolocation에서 작동하지 않습니다.
<script src="http://maps.google.com/maps?file=api&v=3&key=YourKey"
type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
var iconBlue = new GIcon();
iconBlue.image = 'http://labs.google.com/ridefinder/images/mm_20_blue.png';
iconBlue.shadow = 'http://labs.google.com/ridefinder/images/mm_20_shadow.png';
iconBlue.iconSize = new GSize(17, 25);
iconBlue.shadowSize = new GSize(1, 1);
iconBlue.iconAnchor = new GPoint(6, 20);
iconBlue.infoWindowAnchor = new GPoint(5, 1);
var iconRed = new GIcon();
iconRed.image = 'http://labs.google.com/ridefinder/images/mm_20_red.png';
iconRed.shadow = 'http://labs.google.com/ridefinder/images/mm_20_shadow.png';
iconRed.iconSize = new GSize(17, 25);
iconRed.shadowSize = new GSize(1, 1);
iconRed.iconAnchor = new GPoint(6, 20);
iconRed.infoWindowAnchor = new GPoint(5, 1);
var customIcons = [];
customIcons["restaurant"] = iconBlue;
customIcons["bar"] = iconRed;
function load() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map_canvas"));
map.setCenter(new GLatLng(50.061795,19.936924), 16);
// Change this depending on the name of your PHP file
GDownloadUrl("Your_xml.php", function(data) {
var xml = GXml.parse(data);
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 GLatLng(parseFloat(markers[i].getAttribute("lat")),
parseFloat(markers[i].getAttribute("lng")));
var marker = createMarker(point, name, address, type);
map.addOverlay(marker);
}
});
}
}
function createMarker(point, name, address, type) {
var marker = new GMarker(point, customIcons[type]);
var html = "<b>" + name + "</b> <br/>" + address;
GEvent.addListener(marker, 'click', function() {
marker.openInfoWindowHtml(html);
});
return marker;
}
//]]>
function findLoc(){
if (!navigator.geolocation) {
alert('Sorry, your browser does not support Geo Services');
}
else {
// Get the current location
navigator.geolocation.getCurrentPosition(showMap);
}
}
function showMap(position){
var lat = position.coords.latitude;
var lon = position.coords.longitude;
var myPoint = new GLatLng(lat, lon);
var map = new GMap2(document.getElementById("map_canvas"));
map.setCenter(myPoint, 15);
GDownloadUrl("Your_xml.php", function(data) {
var xml = GXml.parse(data);
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 GLatLng(parseFloat(markers[i].getAttribute("lat")),
parseFloat(markers[i].getAttribute("lng")));
var marker = createMarker(point, name, address, type);
map.addOverlay(marker);
}
});
function createMarker(point, name, address, type) {
var marker = new GMarker(point, customIcons[type]);
var html = "<b>" + name + "</b> <br/>" + address;
GEvent.addListener(marker, 'click', function() {
marker.openInfoWindowHtml(html);
});
return marker;
}
}
해결할 수있는 해결책이 없습니다. PS 더 이해하기 쉬운 힌트를주는 오류나 진술은 없습니다. 기기에서 GPS를 사용할 수 있습니다. 명심하십시오. 2 주 동안 알아 내려고 노력했습니다.
들으 내가 (경고를 추가했습니다 'Success!') navigator 직전 .geolocation.getCurrentPosition (showMap); 그리고 그 쇼 내 성공! 즉이 함수 findLoc가 트리거되었음을 의미합니다. showMap funtion에는 문제가 있지만 무엇을 모르겠습니다. –
@TomLiland : Right. 이제 코드의 어떤 부분이 실제로 실패했는지 알 때까지 계속 진행합니다. 첫째,'showMap'의 시작 부분에있는 경고는 그 함수가 실제로 호출되는지 여부를 알려줍니다. 등등; 일반적인 원칙은 지금까지 분명해야합니다. – chaos
navigator.geolocation.getCurrentPosition (showMap)에 문제가있는 것 같습니다. 이것은 findLock 함수가 시작된 후에 호출되지 않았습니다. 내비게이터와 메시지가 나타나지 않은 직후에 경고를했습니다. iPhone에서 나는 모든 메시지를 받았습니다. 이상한 작은 것 :( –