0

ユーザーがテキスト ボックスに入力できる郵便番号から、Google マップ マーカーの位置への道順を取得しようとしています。Maps, Places and Directions の Google ライブラリを使用しています。

私はグーグルからこの例を見つけました。私はそれから作業しようとしてい ます http://code.google.com/apis/maps/documentation/directions/

私はほとんどそこにいると思います。ユーザーが地図からマーカーをクリックしてから、「マーカー 1 からの道順」というリンクをクリックできるようにしたいと考えています。これを正しく表示することができ、正しい場所を関数に渡しますが、何らかの理由で緯度座標全体を保持しません。それらの1つをドロップするように見えるため、エラーがスローされます。新しい関数 (placeLoc) に渡したものを印刷すると、座標の 1 つだけが表示されます。

それが与えるエラーは次のとおりです: Uncaught Error: Invalid value for property : -0.5796900000000278

これまでに得たコードは次のとおりです。

        function addPlaceResults(){

    var request = {
        location: midWayPoint,
        radius: 7000,
        types: [type]
    };

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


    function callback(results, status) {
        if (status == google.maps.places.PlacesServiceStatus.OK) {
            for (var i = 0; i < results.length; 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 request = { reference: place.reference };
        service.getDetails(request, function(details, status) {

            google.maps.event.addListener(marker, 'click', function() {
                infowindow.setContent(
                    details.name + "<br />" 
                    + details.formatted_address + "<br />" 
                    + "<a target='_blank' href='" + details.website +"'>Visit Website</a>" + "<br />" 
                    + details.formatted_phone_number + "<br />"
                    + "<a href='#' onclick='dPoint1(" +placeLoc+ ")'>Directions from Marker One</a>" + "<br />"

                );
             infowindow.open(map, this);
            });
        });
    }
};

        //directions from point one
        function dPoint1(x) {
    console.log(x);
    directionsService = new google.maps.DirectionsService();
    directionsDisplay = new google.maps.DirectionsRenderer({
        suppressMarkers: true,
        suppressInfoWindows: true
    });

    directionsDisplay.setMap(map);
    directionsDisplay.setPanel(document.getElementById('directions-panel'));

    var request = {
        origin: address1, 
        destination: x,
        travelMode: google.maps.DirectionsTravelMode.DRIVING
    };

    directionsService.route(request, function(response, status){
        if (status == google.maps.DirectionsStatus.OK) 
        {
            directionsDisplay.setDirections(response);
        }
    });
};

この質問には、関連するコードと詳細のみを含めようとしました。見逃したものや不明な点がある場合はお知らせください。追加します/自分自身を明確にするために最善を尽くします.

繰り返しになりますが、どんな助けにも感謝します。

乾杯JA


編集

わかりました、それは完全に理にかなっています。みんなありがとう。

toString() メソッドを使用してみましたが、うまくいきません。toUrlValue() を使用して、コンマで区切られた 2 つの値を持つ文字列を dPoint1 関数に正常に渡すことができます。これを行うと、 console.log(x,y) を使用して両方をコンソールに出力できますが、実際にコードを実行することはできません。以前と同じエラーが発生します。

問題は、それらを 1 つのものにする必要があるため、「destination:」に追加できるためだと思います。たとえば、最終的には destination: x にする必要がありますが、x & y を渡す必要があるため、destination: x が必要です。 、y、エラーをスローします。

google.maps.LatLng() メソッドを利用する必要があると思います。

昨夜遅くにこれを追加しました:

newlatlng = new google.maps.LatLng((placeLoc.lat()+placeLoc.lat()));

それは私にいくつかの道順を教えてくれましたが、正しい場所ではありませんでした!

これをどのように使用できるかについて誰かアイデアがありますか?

これまで私を助けてくれて本当にありがとう。

4

2 に答える 2

1

これはうまくいきません

onclick='dPoint1(" +placeLoc+ ")'

オブジェクトをそのような関数に渡すことはできないためです。オブジェクトを文字列として連結すると、おそらく「x、y」の形式になる文字列表現が生成されます。x と y を取る関数 dPoint1 を定義する必要がありますが、これはうまくいくかもしれませんが、placeLoc から派生したリテラル値を明示的に渡す方がよいでしょう。

于 2012-03-05T23:19:18.020 に答える
0

が述べたようにAndrew Leach

onclick='dPoint1(" +placeLoc+ ")'

オブジェクトとして機能しませんplace.geometry.location: http://code.google.com/apis/maps/documentation/javascript/reference.html#PlaceGeometrygoogle.maps.LatLng

ただし、google.maps.LatLngクラスにはtoString()メソッドがあります: http://code.google.com/apis/maps/documentation/javascript/reference.html#LatLng

google.maps.LatLngオブジェクトをdPoint1()メソッドに渡す代わりに、それを使用してみることができます。

例えば

onclick='dPoint1(" +placeLoc.toString()+ ")' 
于 2012-03-06T00:08:52.297 に答える