カテゴリー
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,148 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,212 views

xmlを生成する

// Create XML Object
$xml = new DOMDocument("1.0", "UTF-8");

// Make a Parent Node
$dataset = $xml->createElement("dataset");
$xml->appendChild($dataset);

$data = $xml->createElement("data");
$dataset->appendChild($data);

// make child node
$data->appendChild($xml->createElement("key", $value));

// Show Data
echo $xml->saveXML();
1,187 views

xml形式の文字列からxmlオブジェクトを生成する

$xmlstr = file_get_contents("[XMLファイル名]");
if(!$dom = domxml_open_mem($xmlstr))
{
    echo "Error while parsing the document\n";
    exit;
}
$root = $dom->document_element();
$childnodes = $root->child_nodes();
foreach ($childnodes as $value)
{
    $nodeArray[$value->tagname] = $value->get_content();
    $chnode = $value->child_nodes();

    foreach($chnode as $v)
    {
        echo $v->tagname . " : " . $v->get_content() . "<br />";
    }

    echo "<br />";
}
1,400 views

docomoで「無効なデータを受信しました。(302)」とエラーが出る

ホームページを携帯キャリアで振り分けるとき、docomoでは相対パス指定でリダイレクトするとエラーが発生します。

例えばPHPで

header("Location: ./redirect.html");

とするとエラーになります。

対処方法は絶対パスでリダイレクトする

header("Location: http://www.example.jp/redirect.html");
13,984 views