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と組み合わせるといい感じになるかと思います。