概述
周边地点搜索API是一个功能强大的地理位置服务接口,由接口盒子提供。该接口允许开发者根据指定的经纬度坐标,搜索周边各类地点信息,包括公交站点、酒店、餐厅、商场等POI(兴趣点)数据。
接口特点
丰富的功能特性
- 支持多种地点类型搜索(公交站、酒店、餐厅等)
- 可设置搜索半径(最大10公里)
- 分页查询,每页最多30条结果
- 支持基础信息和详细信息两种返回模式
- 提供行政区划编码和分类代码
请求参数详解
参数名 |
是否必填 |
说明 |
示例 |
id |
是 |
开发者ID,用户中心的数字ID |
id=10000000 |
key |
是 |
开发者通讯秘钥 |
key=15he5h15ty854j5sr152hs2 |
words |
是 |
搜索关键词 |
words=公交 |
radius |
否 |
搜索半径(米),最大10000 |
radius=1000 |
lon |
是 |
查询经度 |
lon=121.415 |
lat |
是 |
查询纬度 |
lat=31.218 |
page |
否 |
页码,默认1 |
page=1 |
type |
否 |
分类代码 |
type=110100 |
show |
否 |
1=基础信息,2=详细信息 |
show=1 |
dkey |
否 |
动态秘钥(开启后需要) |
dkey=0cd2a494831736587c33f30d1e544371 |
uip |
否 |
用户IP(会员专享) |
uip=123.123.123.123 |
返回参数说明
基本返回字段:
code: 状态码(200成功,400错误)msg: 消息内容count: 结果总数allpage: 总页码nowpage: 当前页码
数据详情字段:
datas.address: 地址信息datas.distance: 距离datas.name: POI名称datas.lonlat: 经纬度坐标datas.poiType: 类型(101:POI数据,102:公交站点)datas.stationData: 公交站点的线路信息
调用示例
PHP调用示例
php
php
复制
<?php /** * 周边地点搜索API - PHP调用示例 */ class NearbySearchAPI { private $apiUrl = 'https://cn.apihz.cn/api/other/diming.php'; private $id = '你的开发者ID'; private $key = '你的开发者KEY'; /** * 搜索周边地点 */ public function searchNearby($params) { // 构建请求参数 $requestParams = array( 'id' => $this->id, 'key' => $this->key, 'words' => $params['words'], 'lon' => $params['lon'], 'lat' => $params['lat'], 'radius' => isset($params['radius']) ? $params['radius'] : 1000, 'page' => isset($params['page']) ? $params['page'] : 1, 'show' => isset($params['show']) ? $params['show'] : 1 ); // 可选参数处理 if (isset($params['type'])) { $requestParams['type'] = $params['type']; } // 构建请求URL $queryString = http_build_query($requestParams); $url = $this->apiUrl . '?' . $queryString; // 发送GET请求 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); if (curl_error($ch)) { curl_close($ch); return array('code' => 400, 'msg' => '请求失败: ' . curl_error($ch)); } curl_close($ch); // 解析返回结果 $result = json_decode($response, true); if (json_last_error() !== JSON_ERROR_NONE) { return array('code' => 400, 'msg' => 'JSON解析失败'); } return $result; } /** * 格式化显示结果 */ public function formatResults($results) { if ($results['code'] != 200) { return "搜索失败: " . $results['msg']; } $output = "找到 {$results['count']} 个结果,第 {$results['nowpage']} 页/共 {$results['allpage']} 页\n\n"; foreach ($results['datas'] as $index => $item) { $output .= ($index + 1) . ". {$item['name']}\n"; $output .= " 地址: {$item['address']}\n"; $output .= " 距离: {$item['distance']}\n"; $output .= " 坐标: {$item['lonlat']}\n"; $output .= " 类型: " . ($item['poiType'] == '102' ? '公交站点' : 'POI地点') . "\n"; // 如果是公交站点,显示线路信息 if ($item['poiType'] == '102' && !empty($item['stationData'])) { $lines = array(); foreach ($item['stationData'] as $line) { $lines[] = $line['lineName']; } $output .= " 经过线路: " . implode('、', array_unique($lines)) . "\n"; } $output .= "\n"; } return $output; } } // 使用示例 $api = new NearbySearchAPI(); // 搜索参数 $searchParams = array( 'words' => '公交', 'lon' => 121.415, 'lat' => 31.218, 'radius' => 1000, 'page' => 1, 'show' => 1 ); // 执行搜索 $result = $api->searchNearby($searchParams); // 输出结果 echo $api->formatResults($result); ?>
Python调用示例
python
python
下载
复制
运行
import requests import json from typing import Dict, List, Optional class NearbySearchAPI: """周边地点搜索API Python封装类""" def __init__(self, developer_id: str, developer_key: str): self.api_url = "https://cn.apihz.cn/api/other/diming.php" self.id = developer_id self.key = developer_key def search_nearby(self, words: str, lon: float, lat: float, radius: int = 1000, page: int = 1, show: int = 1, poi_type: Optional[str] = None) -> Dict: """ 搜索周边地点 Args: words: 搜索关键词 lon: 经度 lat: 纬度 radius: 搜索半径(米) page: 页码 show: 显示模式(1=基础,2=详细) poi_type: 分类代码 Returns: API响应结果 """ # 构建请求参数 params = { 'id': self.id, 'key': self.key, 'words': words, 'lon': lon, 'lat': lat, 'radius': radius, 'page': page, 'show': show } if poi_type: params['type'] = poi_type try: # 发送GET请求 response = requests.get( self.api_url, params=params, timeout=30, verify=False # 根据实际情况调整SSL验证 ) if response.status_code != 200: return { 'code': 400, 'msg': f'HTTP请求失败: {response.status_code}' } # 解析JSON响应 result = response.json() return result except requests.exceptions.RequestException as e: return { 'code': 400, 'msg': f'请求异常: {str(e)}' } except json.JSONDecodeError as e: return { 'code': 400, 'msg': f'JSON解析失败: {str(e)}' } def format_results(self, results: Dict) -> str: """格式化显示搜索结果""" if results.get('code') != 200: return f"搜索失败: {results.get('msg', '未知错误')}" output = [] output.append(f"找到 {results.get('count', 0)} 个结果") output.append(f"第 {results.get('nowpage', 1)} 页/共 {results.get('allpage', 1)} 页") output.append("=" * 50) for i, item in enumerate(results.get('datas', []), 1): output.append(f"{i}. {item.get('name', '未知名称')}") output.append(f" 地址: {item.get('address', '未知地址')}") output.append(f" 距离: {item.get('distance', '未知')}") output.append(f" 坐标: {item.get('lonlat', '未知')}") poi_type = "POI地点" if item.get('poiType') == '101' else "公交站点" output.append(f" 类型: {poi_type}") # 公交站点线路信息 if item.get('poiType') == '102' and item.get('stationData'): lines = set(station['lineName'] for station in item['stationData']) output.append(f" 经过线路: {'、'.join(lines)}") output.append("") return "\n".join(output) def search_bus_stations(self, lon: float, lat: float, radius: int = 1000) -> Dict: """专门搜索公交站点的便捷方法""" return self.search_nearby('公交', lon, lat, radius) def batch_search(self, searches: List[Dict]) -> List[Dict]: """批量搜索多个地点""" results = [] for search in searches: result = self.search_nearby(**search) results.append(result) return results # 使用示例 if __name__ == "__main__": # 初始化API(需要替换为实际的ID和KEY) api = NearbySearchAPI("你的开发者ID", "你的开发者KEY") # 示例1:搜索公交站点 print("=== 搜索公交站点示例 ===") result = api.search_bus_stations( lon=121.415, lat=31.218, radius=1000 ) print(api.format_results(result)) # 示例2:搜索酒店 print("\n=== 搜索酒店示例 ===") result = api.search_nearby( words="酒店", lon=121.415, lat=31.218, radius=2000 ) print(api.format_results(result))
技术特色
数据完整性
接口返回的数据包含丰富的字段信息,特别是公交站点数据,不仅包含站点基本信息,还包含经过该站点的所有公交线路详情,非常适合公共交通类应用开发。
灵活的搜索能力
支持按分类代码精确搜索,分类代码表提供了详细的类别定义,可以从餐饮、住宿、交通、购物等多个维度进行精准搜索。