4

EDIT:SOLVED問題コードの下のコードを修正してください。Googleの場所から近くの場所を取得し、結果からGoogleマップにマーカーを追加する

私のコードを正常に動作させるのに問題があります。私がしたいのは、ジオロケーションを使用してユーザーの場所を特定することです。私はその後、文字列から何かを見つけるための検索を行いたいとします(この場合、2000年の半径で "Systembolaget"、そしてGoogleマップ上に結果を表示します。私は自分の位置を地図上に表示しますが、大きなトラブルの場所の結果を取得した。

を私が間違って何をしているのですか?私はJavaScriptからその多くの経験を持っていないので、すべてのヘルプが良いの助けである。

をあなたはコルドバスクリプトに疑問を抱いている場合は、私はPhoneGapのアプリケーションをやっているので、それが必要なのです。

<!DOCTYPE html> 
<meta charset="UTF-8"> 
<html> 
<head> 
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 
<script src="cordova-1.6.0.js"></script> 
<style type="text/css"> 
    html { height: 100% } 
    body { height: 100%; margin: 0; padding: 0 } 
    #map_canvas { height: 100% } 
</style> 
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?key=MYAPIKEY&sensor=true"></script> 
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?libraries=places&sensor=false"></script> 
<script type="text/javascript"> 
// Determine support for Geolocation and get location or give error 
if (navigator.geolocation) { 
    navigator.geolocation.getCurrentPosition(displayPosition, errorFunction); 
} else { 
    alert('It seems like Geolocation, which is required for this page, is not enabled in your browser. Please use a browser which supports it.'); 
} 

// Success callback function 
function displayPosition(pos) { 
    var mylat = pos.coords.latitude; 
    var mylong = pos.coords.longitude; 
    //Load Google Map 
    var latlng = new google.maps.LatLng(mylat, mylong); 
    var myOptions = { 
    zoom: 16, 
    center: latlng, 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
}; 

var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 

// Places 
var request = { 
    location: latlng, 
    radius: '2000', 
    name: ['Systembolaget'] 
}; 

var service = new google.maps.places.PlacesService(map); 
service.search(request, callback); 

function callback(results, status) 
{ 
    if (status == google.maps.places.PlacesServiceStatus.OK) 
    { 
     for (var i = 0; i < results.length; i++) 
     { 
      var place = results[i]; 
      var loc = place.geometry.location; 
      var marker = new google.maps.Marker 
      ({ 
       position: new google.maps.LatLng(loc.Pa,loc.Qa) 
      }); 
      marker.setMap(map); 
     } 
    } 
} 

var marker = new google.maps.Marker({ 
    position: latlng, 
    map: map, 
    title:"You are here" 
}); 
} 

// Error callback function 
function errorFunction(pos) { 
    alert('It seems like your browser or phone has blocked our access to viewing your location. Please enable this before trying again.'); 
} 
</script> 
</head> 
<body> 
     <div id="map_canvas"></div> 
</body> 

が解決しました!正しいコード!

<!DOCTYPE html> 
<meta charset="UTF-8"> 
<html> 
<head> 
<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;" /> 

<title name="title"></title> 

<link rel="stylesheet" type="text/css" href="style.css"> 
<script src="cordova-1.6.0.js"></script> 

<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?libraries=places&sensor=false"></script> 
<script type="text/javascript"> 

// Determine support for Geolocation and get location or give error 
if (navigator.geolocation) { 
    navigator.geolocation.getCurrentPosition(displayPosition, errorFunction); 
} else { 
    alert('It seems like Geolocation, which is required for this page, is not enabled in your browser. Please use a browser which supports it.'); 
} 

// Success callback function 
function displayPosition(pos) { 
    var mylat = pos.coords.latitude; 
    var mylong = pos.coords.longitude; 
    //Load Google Map 
    var latlng = new google.maps.LatLng(mylat, mylong); 
    var myOptions = { 
    zoom: 16, 
    center: latlng, 
    mapTypeId: google.maps.MapTypeId.HYBRID 
}; 

var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 

// Places 
var request = { 
    location: latlng, 
    radius: '20000', 
    name: ['whatever'] 
}; 

var service = new google.maps.places.PlacesService(map); 
service.search(request, callback); 

function callback(results, status) 
{ 
    if (status == google.maps.places.PlacesServiceStatus.OK) { 
     for (var i = 0; i < results.length; i++) { 
      var place = results[i]; 
      createMarker(results[i]); 
      } 
     } 
    } 

    function createMarker(place) { 
     var placeLoc = place.geometry.location; 
     var marker = new google.maps.Marker({ 
     map: map, 
     position: place.geometry.location 
     }); 
     } 

var marker = new google.maps.Marker({ 
    position: latlng, 
    map: map, 
    title:"You're here" 
}); 


} 

// Error callback function 
function errorFunction(pos) { 
    alert('It seems like your browser or phone has blocked our access to viewing your location. Please enable this before trying again.'); 
} 
</script> 
</head> 
<body> 
    <div id="map_canvas"></div> 
</body> 

答えて

2

あなたは本当にあなたが失敗している正確にどのように説明していないので、それは、あなたの特定の助けを与えることは難しいです。しかし、私がすぐに気づくことの1つは、google.mapsスクリプトを2度読み込み、それぞれ異なるsensorの情報を表示しようとしているようです。あなたの最初のgoogle.mapsスクリプトタグには、リテラルテキストMYAPIKEYが含まれていなければなりません。あなたは、変数の本当の鍵を持っていた場合、私のような何か期待する:

src="http://maps.googleapis.com/maps/api/js?key=" + MYAPIKEY + "&sensor=true" 

をしてから2番目のスクリプトタグで、あなたは正しく場所のライブラリをロードするように見えるが、その後、あなたのセンサータグは以下のように設定されている:sensor-false。 2番目のスクリプトタグが私にとって正しいと思われるので、最初のスクリプトタグを最初から削除することをお勧めします。

そこから、ページがどのように機能していないか、おそらくページへのリンクの詳細を提供できますか?

いくつかの追加の観測:それはdisplayPosition関数を呼び出しますが、displayPosition内のコードがGoogleマップをロードしませんかのように

  • あなたの初期のif-elseが見えます。関数が終了するとスコープから外れるいくつかの変数を作成するだけです。
  • displayPosition機能の外では、Googleマップの新しいインスタンスを作成しますが、displayPosition機能のスコープ内にしか存在しなかったため、コードのこの時点では存在しないmyOptionsを参照します。

は、私のような何かに作成地図に関連するコードを変更することをお勧め:

var map = null; 
if (navigator.geolocation) { 
    navigator.geolocation.getCurrentPosition(displayPosition, errorFunction); 
} else { 
    alert('It seems like Geolocation, which is required for this page, is not enabled in your browser. Please use a browser which supports it.'); 
} 

// Success callback function 
function displayPosition(pos) { 
    var mylat = pos.coords.latitude; 
    var mylong = pos.coords.longitude; 
    //Load Google Map 
    var latlng = new google.maps.LatLng(mylat, mylong); 
    var myOptions = { 
     zoom: 16, 
     center: latlng, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 
} 
+0

ねえ!私は両方のGoogleマップとGoogleプレイスライブラリを読み込む必要があると思ったが、提案したように、それは最初の行なしで動作している。問題はまだ同じですが、地図上に結果やマーカーが表示されません! Ofcourse私はstackoverflowにコードをアップロードしたときに "myapikey"で私の本当のapikeyを切り替えました! :)私はphonegappアプリケーションのために行くので、私はそれに取り組んでいる間、ページはローカルです。 –

+0

私は結果をコンソールに出力することができますので、私はそれらを取得していることを知っていますが、私はそれらが地図上に表示されていません! –

+0

また、「マーカー」と呼ばれる2つの変数がありますが、自分の位置についてマーカーをコメントアウトしても機能しませんでした。 –