php实现搜索地图,php es区域搜索,按地图经纬度搜索,范围搜索

php   关于es关于区域搜索

1:对角线区域搜索

$search_params = array(

'body' => array(

'post_filter'=>array(

'geo_bounding_box'=>array(

'location'=>array(

'top_left'=>array(

'lat'=>$params_top_left_lat,

'lon'=>$params_top_left_lon

),

'bottom_right'=>array(

'lat'=>$params_bottom_right_lat,

'lon'=>$params_bottom_right_lon

)

)

)

)

),

'from' => $offset,

'size' => $limit,

'_source' => $source,

);

2:坐标围成的多边形区域搜索

$borders = “116.403183,40.067132;116.412095,40.063709;116.414825,40.058463;116.405483,40.059015;116.40268,40.062604;116.397219,40.066469;116.3965,40.067795”;

foreach($borders as $key=>$v){

$latLon = explode(",",$v);

$borderArr[$key]['lon'] = $latLon[0];

$borderArr[$key]['lat'] = $latLon[1];

}

//1):只是多边形搜索

$geo_search = [

'geo_polygon' => [

'location' => [

'points'=>$borderArr

]

]

];

$search_params['body']['post_filter'] = $geo_search;

//2):增加其他条件搜索 如:we_type=1

$search_params = array(

'body' => array(

'query' => array(

'filtered'=>array(

"filter"=>array(

'bool'=>array(

'must'=>array(

array(

'term'=>array(

'we_type'=>1

)

),

array(

'geo_polygon' => [

'location' => [

'points'=>$borderArr

]

]

)

)

)

)

)

),

'sort' => array('sort_id' => array('order' => 'desc'))

),

'size' => 1000

);

数据格式示例:{

"query": {

"filtered": {

"filter": {

"bool": {

"must": [

{

'term':{

'we_type':1

}

},

{

"geo_polygon": {

"location": {

"points": [

{

"lon": "116.425369",

"lat": "39.89931"

},

{

"lon": "116.426905",

"lat": "39.899359"

},

{

"lon": "116.428441",

"lat": "39.899387"

},

{

"lon": "116.429991",

"lat": "39.899421"

}

]

}

}

}

],

"must_not":{

"term":{

"platforms":1

}

}

}

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值