0

地図から場所を逆引きしようとしています。たとえば、データベース内に座標と詳細を含むさまざまな場所があります。

これで、(Mapquestで)マップをズームイン/ズームアウトまたはドラッグするたびに、すべてのエントリがマップの表示領域とともにドロップダウンに表示されます。マップのズームレベルと位置に応じてリストを更新する必要があります。

とにかくこれを行うことはありますか?グーグルマップでも大丈夫です。

これが私が達成したいリンクです。 http://oobgolf.com/courses/finder/

4

2 に答える 2

1

基本的に...ビジネスロジックは次のようになります。

マップオブジェクトから境界を取得し、AJAXを介してこれらをパラメータとしてSQLクエリに渡す必要があります。SQLクエリは、レコードをフェッチします。たとえば、minLat / maxLat&minLng /maxLng...これらはWHERE条件に入ります。これにより、地理データから「長方形が切り取られ」ます。これらの値を5〜10%調整して、境界に非常に近いポイントがマップにペイントされないようにすることができます(これは単なる見た目の修正です)。

Google Maps API(jQueryを使用)のドライブでサンプルJSコードを見つけました。

function loadViewport() {
    var b = map.getBounds();
    $.minY = b.getNorthEast().lng();
    $.maxY = b.getSouthWest().lng();
    $.minX = b.getSouthWest().lat();
    $.maxX = b.getNorthEast().lat();
    $.url = "http://www.somehost.com/data.php?mode=viewport&minX="+$.minX+"&maxX="+$.maxX+"&minY="+$.minY+"&maxY="+$.maxY;
    $.ajax({type:"GET",url:$.url,dataType:"json",success: parseJSON});
}

左側のリストへの入力は、関数parseJSON()で行う必要があります...

SQLのWHERE条件は、次のようになります。

    WHERE
        (`location`.`latitude` BETWEEN ".(float)$minX." AND ".(float)$maxX.") 
    AND
        (`location`.`longitude` BETWEEN ".(float)$maxY." AND ".(float)$minY.")

もちろん、テーブルの列はデータ型floatである必要があります。そうでない場合、これは確実に機能しません。

ご覧のとおり、比較を可能にするために、文字列からフロートにキャストしています...

これがお役に立てば幸いです。MapQuestのコードは異なる場合がありますが、ロジックはまったく同じである必要があります。

ソース

于 2011-12-16T03:32:07.157 に答える
0

このロジックは、MapQuestAPIでも機能します。マップの範囲に基づいてデータベースにクエリを実行できるように、マップの現在の範囲をクエリに渡す必要があります。クエリの結果がドロップダウンメニューに表示されるため、現在マップに表示されているすべてのPOIのドロップダウンメニューに対応するアイテムが表示されます。

MapQuest JavaScript APIを使用している場合は、マップ範囲の現在のバウンディングボックスを返すMQA.TileMap.getBoundsメソッドを確認してください。MapQuest Developer Network Webサイトのフォーラムは、質問があるときに非常に役立つことがわかったので、ヘルプが必要な場合やさらに詳しい説明が必要な場合は、遠慮なく質問またはコードサンプルを投稿してください。リンクは次のとおりです:http://developer.mapquest.com/web/products/forums/

于 2011-12-20T16:16:17.610 に答える