0

nokia.places.widget.SearchBoxと一緒にnokia.maps.map.Displayを使用しています。

検索ボックスの onSelect 関数を使用して、ユーザーが結果リストから項目を選択したときに操作を実行できます。

私がする必要があるのは、選択した場所にマップを中心にしてズームすることです。私の問題は、使用するレベルがわからないため、ズームに関するものです。

一部の場所にはboundingBox(DisplayコンポーネントのzoomTo関数で使用する)プロパティがありますが、他の場所にはありません。カテゴリ ( 'administrative-region''street-square'など) を使用できますが、正確なものではなく、さらに可能なカテゴリ コードのリストが見つかりません。

なにか提案を?

4

1 に答える 1

1

提案が選択されたときに地図を移動/ズームするには、onResultsハンドラーを実装する必要があります。

var fromSearchBox = new nokia.places.widgets.SearchBox({
    targetNode: "fromSearchBox",
    template: "fromSearchBox",
    map: map,
    onResults: function (data) {
        // Your code goes here //

    }
});

お気づきのように、dataフィールドにはバウンディング ボックスがある場合とない場合があります。これは、定義されたエリアをカバーする場所が少なく、ほとんどがポイントアドレスであるためです。

境界ボックスを持つサブセットの場合、次のことができます。

if (data.results.items[0].boundingBox){
    map.zoomTo(data.results.items[0].getBoundingBox());
}

残りの答えは、達成しようとしているものによって異なりますが、次のいずれかを試すことができます。

  • ズームを変更せずにマップ上の場所に移動します。(つまり、ユーザーに決定させます)

    map.set("center", data.results.items[0].position);
    
  • 指定された位置にあるポイント オブジェクトの指定されたバウンディング ボックスに移動します。

    var obj = new nokia.maps.map.StandardMarker(startPoint);
    map.zoomTo(obj.getBoundingBox());   
    

または、次のようにします。map.zoomTo(nokia.maps.geo.BoundingBox.coverAll([startPoint]));

  • ポイントの位置を囲む境界ボックスを定義し、代わりにそれにズームします

    startPoint =data.results.items[0].position;
    bottomLeft = new nokia.maps.geo.Coordinate(startPoint.latitude - 0.1,
             startPoint.longitude + 0.1);
    topRight = new nokia.maps.geo.Coordinate(startPoint.latitude + 0.1,
             startPoint.longitude - 0.1);
    map.zoomTo(nokia.maps.geo.BoundingBox.coverAll([topRight, bottomLeft]));
    

さらに、Display.zoomTo()は追加のパラメーターを受け取ることもできるため、これを使用 map.zoomTo(BoundingBox, true)すると、画面上のマップの現在の中心も維持され、ユーザーにより多くのコンテキストが提供される場合があります。

于 2013-09-16T13:25:41.873 に答える