0

ユーザーの物理的な位置を検出するための貢献/コアモジュールはありますか(IPに基づいている可能性がありますか?)。

私が最終的にやりたいことは次のとおりです。1.ユーザーの位置を検出します2.ユーザーの現在の位置からノードに接続された位置データまでの距離を計算します(ノードには位置データがあります)3.距離に基づいて結果をフィルタリングします(つまり、選択したノードを表示します)

どんな方向でも役に立ちます。

D7を使用しています。

4

4 に答える 4

1

Smart IP モジュールは、ユーザーの IP アドレスを緯度と経度の座標に変換します。次の関数は、2 組の座標間のマイル単位の球面距離を返します。

function _get_spherical_distance($s_pd, $s_ld, $f_pd, $f_ld) {
  $s_pr = deg2rad($s_pd);
  $f_pr = deg2rad($f_pd);
  $lr = deg2rad($s_ld - $f_ld);

  return 3960 * acos(sin($s_pr) * sin($f_pr) + cos($s_pr) * cos($f_pr) * cos($lr));
}

例: ジョージア州アトランタ (33.7489、-84.3879) からワシントン州レドモンド (47.6739、-122.1214):

print _get_spherical_distance(33.7489, -84.3879, 47.6739, -122.1214);

出力:

2170.4293537864

それは2,170マイルです。住所を緯度と経度の座標に変換する必要がある場合は、Google Geocoding APIを使用できます。

$address_string = "1600 Pennsylvania Avenue, Washington, DC 20500";
$geo_html = file_get_contents('http://maps.google.com/maps/geo?sensor=false&oe=utf8&output=csv&q='. urlencode($address_string));

print_r($geo_html);

出力:

200,8,38.8987149,-77.0376555

これは、カンマで区切られた 4 つの値の文字列です。1 つ目はHTTP ステータス コードです。200 が表示されます。2 番目の値は、変換精度の近似値です。住所からユーザーまでの距離に基づいてコンテンツをフィルター処理する場合は、少なくとも 6 の精度値が必要になるでしょう。3 番目と 4 番目の値は、明らかに緯度と経度です。

于 2012-07-06T07:48:37.967 に答える
1

Drupal 7 の IP - ロケーション検出を提供する (私が知っている) 2 つのモジュールがあります。

その後、 Location モジュールが次の目的地になると思います。

現時点では、ロケーションベースの検索を実装するために必要なビュー統合を提供する唯一のモジュールであり、ユーザーが指定したロケーションの近くにあるマップ上のポイントを見つける目的で設計されています。

于 2012-07-05T10:52:21.120 に答える
1

1- jQuery とこのすばらしいスクリプトを使用して、使用場所を取得できます。

使用例:

jQuery.getScript('http://www.geoplugin.net/javascript.gp', function()
{
    $('#results').html("Your location is: " + geoplugin_countryName() + ",
    " + geoplugin_region() + ", " + geoplugin_city());
});

2-各場所の緯度と経度を知っているユーザーの場所と別の場所の間の距離を計算できます。

例:

jQuery.getScript('http://www.geoplugin.net/javascript.gp', function()
{
    var source_longitude = 30.049999;
    var source_latitude = 31.250000;
    var user_longitude = geoplugin_longitude();
    var user_latitude = geoplugin_latitude();
    var earth_radius = 6371; // in Kilo Meters

    var dLat = (source_latitude - user_latitude).toRad();
    var dLon = (source_longitude - user_longitude).toRad();

    source_latitude = source_latitude.toRad();
    user_latitude = user_latitude.toRad();

    var x = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(source_latitude ) * Math.cos(user_latitude ); 
    var y = 2 * Math.atan2(Math.sqrt(x), Math.sqrt(1 - x));

    var distance = earth_radius * y;
});

3- 結果をフィルタリングするには、距離とhook_node_access () を使用して、距離に基づいてノード ビューの権限を変更します。

これが役に立てば幸いです...ムハンマド。

于 2012-07-05T11:17:31.883 に答える
0

探しているモジュールは IP 地理位置情報ビューですhttps://drupal.org/project/ip_geoloc この質問と回答も確認してください: https://drupal.stackexchange.com/questions/54873/geofield-proximity -インビュー

于 2013-05-31T22:09:12.417 に答える