WordPressにajax通信でionicから位置情報を送信する方法

ionicから指定した緯度、経度から一定の距離以内に存在する位置情報を格納したオープンデータを取得するコードを書きました。

ajax通信に関するセットアップの詳細はこちらを参考にしてください。

以下は100m以内に存在するオープンデータを取得するコードです。 本来は距離の算出をする際にサーバー側の演算の負担を減らすべきだと思いましたが、わかりやすさ重視でそのままkmで距離を求めるプログラムを書きました。

ionic側のjavascript

jQuery(function ($){
        $.ajax({
            type: 'POST',
            dataType: 'json',
            crossDomain: true,
            url: wp_url_admin_ajax,
            data: {
                //action : paket
                action : "tell_me",
                'lat': latitude, //任意の緯度情報が格納された変数をlatitudeとする
                'lng': longitude //任意の経度情報が格納された変数をlongitudeとする
            },
            success: function(response){
                if(response != "error"){ //サーバー側でionicから送信した位置情報に対して十分近くのオープンデータがなければ"error"を受信する
                    mark(response);
                }
                else{
                    console.log(`Not found`);
                }
            }
        });
    });

wordpressのfunctions.php

function tell_me() {
    $lat=(double)$_POST['lat']; //ionicから受信した緯度
    $lng=(double)$_POST['lng']; //ionicから受信した経度
        'posts_per_page' => -1,
        'category_name' => 'Uncategorized',
        'author'       => 'admin',
        'post_status'      => 'draft',
        'title'=>'OpenData' );
    $keys = array('name','latitude','longitude');
    $myposts = get_posts( $args );
    $i=0;
    foreach ($myposts as $post) {
        setup_postdata( $post );

        $data_lat=(double)get_post_meta( $post->ID ,'latitude' ,true);
        $d_lat = $data_lat - $lat; //オープンデータの緯度とionicから受信した緯度の差

        $data_lng=(double)get_post_meta( $post->ID ,'longitude' ,true);
        $d_lng = ($data_lng - $lng); //オープンデータの経度とionicから受信した経度の差

        $L=(55.6*$d_lat)**2+(55.6*$d_lng)**2; //角度差から距離の一時近似を算出(単位:km)

        if ( $L<0.1 ) { //100m以内に存在するオープンデータを取得する
            foreach ($keys as $key){
                $data[$i][(string)$key] = get_post_meta( $post->ID , $key ,true);
            }
            $i++;
        }
    }
    if($i == 0){
        echo json_encode("error", JSON_UNESCAPED_UNICODE);; //該当するオープンデータがない場合はerrorを返す
    }
    else{
        echo json_encode($data, JSON_UNESCAPED_UNICODE);
    }
    die();
}

Google Map ApiのMarkerと組み合わせるといい感じになるかと思います。