カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

座標範囲の算出

ある地点から指定した半径以内に該当する座標を絞り込みたいとき、検索に使用する値を得るサンプルです。

考え方としては、指定した半径を基に矩形を作成し、その範囲に含まれる座標を検索する、というものです。
残念ながら“指定した半径を基に作成した円の中に含まれる”ではありません。

通常は2点間の距離を算出し、半径以内に収まるかを出したほうがいいのですが、比較するデータが多い場合は1つ1つ処理しているとかなり負荷がかかります。
そのため、ざっくり検索する方法をご紹介します。

今回はPHPのコードですが、JavaScriptなど他の言語でも利用できます。

まず、算出に必要な度数毎の距離を宣言します。

// 緯度1秒の平均距離 約30.9m
// 緯度35度上の緯度1秒の距離 約30.8m
$lat_length = 30.9;

// 緯度35度上の経度1秒の距離 約25m
$lng_length = 25;

探したい範囲の半径(km)を設定します。 続きを読む…»

4,036 views

座標の変換

緯度・経度を日本測地系から世界測地系(WGS84)に変換する
コードは例としてPHPで書いています。

function cnvCoords($ido, $keido)
{
    $ido   = $ido - $ido * 0.00010695  + $keido * 0.000017464 + 0.0046017;
    $keido = $keido - $ido * 0.000046038 - $keido * 0.000083043 + 0.010040;

    return array($ido, $keido);
}

緯度・経度を世界測地系(WGS84)から日本測地系に変換する

function cnvDeCoords($ido, $keido)
{
    $ido   = $ido + $ido * 0.00010695  - $keido * 0.000017464 - 0.0046017;
    $keido = $keido + $ido * 0.000046038 + $keido * 0.000083043 - 0.010040;

    return array($ido, $keido);
}

※変換の際、経度を計算するために必要な緯度は、変換後の値であることに注意

Javaの場合 続きを読む…»

3,087 views

GoogleMap v3のmapオブジェクトのイベント

イベント 引数 説明
bounds_changed None このイベントは、ビューポートの境界が変更されると発生します。
center_changed None このイベントは、地図の中心プロパティが変更されると発生します。
click MouseEvent このイベントは、ユーザーが地図をクリックすると発生します(ただしマーカーや情報ウィンドウをクリックした場合には発生しません)。
dblclick MouseEvent このイベントは、ユーザーが地図上でダブルクリックすると発生します。この直前には、クリック イベントも発生します。
drag None このイベントは、ユーザーが地図をドラッグしている間に繰り返し発生します。
dragend None このイベントは、ユーザーが地図のドラッグを停止すると発生します。
dragstart None このイベントは、ユーザーが地図のドラッグを開始すると発生します。
idle None このイベントは、移動またはズームの後に地図がアイドルになると発生します。
maptypeid_changed None このイベントは、map TypeId プロパティが変更されると発生します。
mousemove MouseEvent このイベントは、ユーザーが地図コンテナ上にマウスオーバーすると発生します。
mouseout MouseEvent このイベントは、マウスが地図コンテナから離れると発生します。
mouseover MouseEvent このイベントは、マウスが地図コンテナ内に入ると発生します。
projection_changed None このイベントは、投影が変更されると発生します。
resize None DIV のサイズが変更される場合、デベロッパーは地図でこのイベントをトリガする必要があります: google.maps.event.trigger(map, ‘resize’)
rightclick MouseEvent このイベントは、地図のコンテナで DOM コンテキストメニュー イベントが発生すると発生します。
tilesloaded None このイベントは、表示タイルで読み込みを終了すると発生します。
zoom_changed None このイベントは、地図のズーム プロパティが変更されると発生します。
4,011 views

自身のIPアドレスを取得

using System.Windows.Forms;
using System.Text.RegularExpressions;
using System.Net;


public static int check_ip()
{
  string hostname;     // ホスト名
  IPHostEntry ipentry; // IPエントリ(IPアドレスリスト)
  IPAddress ipaddr;    // IPアドレス
  string ipaddress;    // IPアドレス
  string[] IP_ARRAY;
  int n;

  ipaddress = "0.0.0.0";

  try
  {
    // ホスト名を取得
    hostname = Dns.GetHostName();

    // ホスト名からIPアドレスを取得する
    ipentry = Dns.GetHostEntry(hostname);

    // windows7だと、IPアドレスがインデックス「2」のため
    // ループで取り出す
    for (int i = 0; i < ipentry.AddressList.Length; i++)
    {
      // Regex : 正規表現
      Regex myRegex = new Regex(@"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$");
      // 対象文字列が存在するか?
      if (myRegex.IsMatch(ipentry.AddressList[i].ToString()))
      {
        ipaddr = ipentry.AddressList[i];
        ipaddress = ipaddr.ToString();
        break;
      }
    }
  }
  catch(Exception ex)
  {
    MessageBox.Show(ex.Message);
    Application.Exit();
  }

  // ネットワーク識別子を取得
  IP_ARRAY = ipaddress.Split('.');

  // ネットワーク識別子を返す
  n = int.Parse(IP_ARRAY[2]);

  return n;
}
3,671 views

デフォルトゲートウェイのアドレスを取得する

要参照設定

System.Net.NetworkInformation;

public static void getDefaultGateway()
{
 NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();

 foreach (NetworkInterface adapter in adapters)
 {
  IPInterfaceProperties adapterProperties = adapter.GetIPProperties();
  GatewayIPAddressInformationCollection addresses =
   adapterProperties.GatewayAddresses;
  if (addresses.Count > 0)
  {
   foreach (GatewayIPAddressInformation address in addresses)
   {
    Console.WriteLine(address.Address.ToString());
   }
  }
 }
}

adapter.Name
ネットワークアダプタの名前を取得
例)ローカル エリア接続

adapter.Id
ネットワークアダプタのID
例){A32F1F13-1CBD-4300-ADE6-D3AEA1426A52}

adapter.OperationalStatus
ネットワーク接続の現在の操作状態を取得
例)Up

adapter.Speed
ネットワークインターフェイスの速度を取得
例)100000000

adapter.Description
インターフェイスの説明を取得
例)Broadcom NetXtreme 57xx Gigabit Controller – パケット スケジューラ ミニポート

11,906 views