2

私はしばらくこのプロジェクトに取り組んできました。私は、IP 番号 (IP アドレスの一種の操作) を経度座標と緯度座標にマッピングする無料のデータベースがたくさんあることを知りました。ただし、これらのデータベースの精度は非常に悪いです。

いくつかのデータベース間をマージして、最もよくある回答または回答の「平均」にマージしようとしました。

これで精度は向上しましたが、期待したほどではありませんでした。

別のアイデアがあります.Tracerouteコマンドを使用して、このターゲットへのパスを把握し、途中のホップに従って、ターゲットがどこにあるかを判断します。

新しいアイデア、または場所を特定するのに役立つ何らかのプロトコルを探しています。私はパブリック Cookie について考えていましたが、それは侵略的すぎるかもしれません。さらに、友人は、SNMP プロトコルが役立つかもしれないと教えてくれましたが、実装は非常に複雑です。

私の目標は、このコンピューターがどの都市にあるかを判断することです。これは私が目指している精度です。

私の英語に感謝し、申し訳ありません!

4

2 に答える 2

1

HTML5の新しいジオロケーションを使用できます。例: http: //html5demos.com/geo

(上記のリンクから取得)

コード:

<script>
function success(position) {
  var s = document.querySelector('#status');

  if (s.className == 'success') {
    // not sure why we're hitting this twice in FF, I think it's to do with a cached result coming back    
    return;
  }

  s.innerHTML = "found you!";
  s.className = 'success';

  var mapcanvas = document.createElement('div');
  mapcanvas.id = 'mapcanvas';
  mapcanvas.style.height = '400px';
  mapcanvas.style.width = '560px';

  document.querySelector('article').appendChild(mapcanvas);

  var latlng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
  var myOptions = {
    zoom: 15,
    center: latlng,
    mapTypeControl: false,
    navigationControlOptions: {style: google.maps.NavigationControlStyle.SMALL},
    mapTypeId: google.maps.MapTypeId.ROADMAP
  };
  var map = new google.maps.Map(document.getElementById("mapcanvas"), myOptions);

  var marker = new google.maps.Marker({
      position: latlng, 
      map: map, 
      title:"You are here!"
  });
}

function error(msg) {
  var s = document.querySelector('#status');
  s.innerHTML = typeof msg == 'string' ? msg : "failed";
  s.className = 'fail';

  // console.log(arguments);
}

if (navigator.geolocation) {
  navigator.geolocation.getCurrentPosition(success, error);
} else {
  error('not supported');
}

</script>

データベースに関しては、私はその道を進んできました。すべてのデータベースで約50マイルの精度しか得られない完璧なソリューションはありません。

これにより、Ajaxを使用して位置データをサーバーにプッシュできます。

于 2011-11-03T16:15:45.510 に答える
1

確実に動作することはできません。たとえば、次のシナリオを考えてみましょう。

  • 会社に VPN があります。

    これにより、物理的に存在しなくても会社から IP アドレスを取得できます。

    ここはどこ?私の会社の場所で?それとも、休暇を過ごす世界の反対側でしょうか?

  • プロバイダーへのダイヤルアップ接続があります。

    ここはどこ?ダイヤルイン ノードが置かれている場所、または実際に私がいる場所は?

これらの 2 つの例は、IP アドレス自体が地理情報を保持していない (保持できない) ことを示しています。これは経験によって関連している可能性があります。ユーザーは現在の IP アドレスに関連付けられた (動的な?) IP アドレスをデータベースに入力しますが、それだけです。いわば、正確にできないのはシステムに固有のものです。

ADSL と動的 IP アドレスを介してオンラインになる「平均的なユーザー」を探す場合、プロバイダーが同じプールからアドレスを取得する領域がどのくらい大きいかはわかりません。接続を切断した後、次にこの IP アドレスを取得するユーザーは、私から 50 km、500 km、または 2000 km 離れている可能性があります (お住まいの国によって異なります)。

ビジネス顧客に割り当てられた固定 IP でさえ、その場所を変更する可能性があります。ビジネスが移動するか、存在しなくなり、IP アドレスがまったく別の顧客に割り当てられます。

そして、IPv6がますます普及するにつれて、これらすべてが今後数か月/数年で再び変化するでしょう.

于 2011-11-03T16:35:32.857 に答える