web-dev-qa-db-ja.com

ユーザーIPから緯度と経度を取得する

私のウェブサイトに接続しているユーザーから緯度と経度を取得して地図上に自分の位置を描画または表示しようとしていますが、間違った位置に表示されていました。正確な緯度と経度を取得する方法はありますか?

    <?php drupal_add_js('http://maps.google.com/maps/api/js?sensor=true'); ?>
     `<script type="text/javascript">
        //document.write("Hello World!");
        jQuery(document).ready(function () {
            function initialize(att,lon,title) {

            var mapOptions = {
                zoom: 8,
                center: new google.maps.LatLng(att,lon),
                mapTypeId: google.maps.MapTypeId.ROADMAP //TERRAIN
            };
            map = new google.maps.Map(document.getElementById("map_canvas2"),mapOptions);
            map.disableDefaultUI = true;

            var marker = new google.maps.Marker({
                map: map,
                icon:Drupal.settings.basePath+'themes/bartik/logo.png',
                position: map.getCenter()
            });

            var infowindow = new google.maps.InfoWindow();
            infowindow.setContent('<div class="title-map">'+title+'</div>');
            jQuery('.title-map').parent().removeAttr('style');

            google.maps.event.addListener(marker, "click", function() {

                infowindow.open(map, marker);

            });
        }
        jQuery.getJSON('http://api.wipmania.com/jsonp?callback=?', function (data) {
            initialize(data.latitude,data.longitude,'title');
        });
    </script>
    <?php

     echo "<div id="map_canvas2" style="width:605px; height:465px"></div>";
?>
4
Mohamed Ibrahim

ユーザーがプロキシを使用している可能性があるため、IPを緯度と経度に変換することはお勧めできません。より良い方法は、HTML5ジオロケーションを使用することです。これは、IP、ワイヤレス接続、セルタワーのロケーション、GPSなどの2つのパラメーターに基づいてロケーションを取得しようとします。

試してください:

navigator.geolocation.getCurrentPosition(show_map);

function show_map(position) {
  initialize(position.coords.latitude, position.coords.longitude, 'title');
}

HTML5ジオロケーションの詳細 こちら 、ブラウザーがジオロケーションをサポートしていない場合、またはユーザーが自分の位置を共有するリクエストを拒否した場合(正常な低下)にフォールバックがあることを確認してください。

7
Bart

私が現在使用している実装は、他のいくつかの質問で見ましたが、選択した回答として見ていません。

ブログ thenullreference.com で詳しく説明されていますが、ここでは簡単に説明します:


基本的には、GoogleのAPIローダースクリプトを読み込むだけです。

<script type="text/javascript" src="http(s)://www.google.com/jsapi"></script>

その後、詳細な位置情報を提供するいくつかのプロパティにアクセスできます。

見たいオブジェクトはgoogle.loader.ClientLocationです

  • ClientLocation.latitude
  • ClientLocation.longitude
  • ClientLocation.address.city
  • ClientLocation.address.country
  • ClientLocation.address.country_code-ISO 3166-1国コード
  • ClientLocation.address.region-これは州である米国の国別の地域

*これらの一部はnullになる可能性があることに注意してください

このAPIの詳細については、以下を確認してください ここ

他の誰かがこれを使用していますか?誰かが使っているもののようにシンプルで優れているものはありますか?このアプローチに問題はありますか?

私はこのソリューションの適用範囲/正確さを知りませんが、Googleはそれを更新し続けており、おそらくかなり良いと思います。

1
mohit_rocks

私のアプリでは、場所が変更されたときに特定の機能を有効にする必要があるため、ユーザーの場所を取得するためにHTML5実装に依存しないようにする必要がありました。 www.telize.comとwww.iptolatlng.comは、JSON結果を返すので、私がやっていることに役立つことがわかりました。

0
Michael