333 lines
9.0 KiB
JavaScript
333 lines
9.0 KiB
JavaScript
|
|
const express = require('express');
|
|||
|
|
const router = express.Router();
|
|||
|
|
const mapController = require('../controllers/mapController');
|
|||
|
|
const farmController = require('../controllers/farmController');
|
|||
|
|
const { verifyToken } = require('../middleware/auth');
|
|||
|
|
|
|||
|
|
// 公开API路由,不需要验证token
|
|||
|
|
const publicRoutes = express.Router();
|
|||
|
|
router.use('/public', publicRoutes);
|
|||
|
|
|
|||
|
|
// 公开地理编码接口
|
|||
|
|
publicRoutes.get('/geocode', mapController.geocode);
|
|||
|
|
|
|||
|
|
// 公开反向地理编码接口
|
|||
|
|
publicRoutes.get('/reverse-geocode', mapController.reverseGeocode);
|
|||
|
|
|
|||
|
|
// 公开路线规划接口
|
|||
|
|
publicRoutes.get('/direction', mapController.direction);
|
|||
|
|
|
|||
|
|
// 公开周边搜索接口
|
|||
|
|
publicRoutes.get('/place-search', mapController.placeSearch);
|
|||
|
|
|
|||
|
|
// 公开静态地图接口
|
|||
|
|
publicRoutes.get('/static-map', mapController.staticMap);
|
|||
|
|
|
|||
|
|
// 公开IP定位接口
|
|||
|
|
publicRoutes.get('/ip-location', mapController.ipLocation);
|
|||
|
|
|
|||
|
|
// 公开获取养殖场地理位置数据
|
|||
|
|
publicRoutes.get('/farms', farmController.getAllFarms);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @swagger
|
|||
|
|
* tags:
|
|||
|
|
* name: Map
|
|||
|
|
* description: 百度地图API服务
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @swagger
|
|||
|
|
* /api/map/geocode:
|
|||
|
|
* get:
|
|||
|
|
* summary: 地理编码 - 将地址转换为经纬度坐标
|
|||
|
|
* tags: [Map]
|
|||
|
|
* security:
|
|||
|
|
* - bearerAuth: []
|
|||
|
|
* parameters:
|
|||
|
|
* - in: query
|
|||
|
|
* name: address
|
|||
|
|
* schema:
|
|||
|
|
* type: string
|
|||
|
|
* required: true
|
|||
|
|
* description: 地址
|
|||
|
|
* responses:
|
|||
|
|
* 200:
|
|||
|
|
* description: 地理编码成功
|
|||
|
|
* content:
|
|||
|
|
* application/json:
|
|||
|
|
* schema:
|
|||
|
|
* type: object
|
|||
|
|
* properties:
|
|||
|
|
* success:
|
|||
|
|
* type: boolean
|
|||
|
|
* example: true
|
|||
|
|
* result:
|
|||
|
|
* type: object
|
|||
|
|
* properties:
|
|||
|
|
* location:
|
|||
|
|
* type: object
|
|||
|
|
* properties:
|
|||
|
|
* lng:
|
|||
|
|
* type: number
|
|||
|
|
* description: 经度
|
|||
|
|
* lat:
|
|||
|
|
* type: number
|
|||
|
|
* description: 纬度
|
|||
|
|
* 400:
|
|||
|
|
* description: 请求参数错误
|
|||
|
|
* 401:
|
|||
|
|
* description: 未授权
|
|||
|
|
* 500:
|
|||
|
|
* description: 服务器错误
|
|||
|
|
*/
|
|||
|
|
router.get('/geocode', verifyToken, mapController.geocode);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @swagger
|
|||
|
|
* /api/map/reverse-geocode:
|
|||
|
|
* get:
|
|||
|
|
* summary: 逆地理编码 - 将经纬度坐标转换为地址
|
|||
|
|
* tags: [Map]
|
|||
|
|
* security:
|
|||
|
|
* - bearerAuth: []
|
|||
|
|
* parameters:
|
|||
|
|
* - in: query
|
|||
|
|
* name: lat
|
|||
|
|
* schema:
|
|||
|
|
* type: number
|
|||
|
|
* required: true
|
|||
|
|
* description: 纬度
|
|||
|
|
* - in: query
|
|||
|
|
* name: lng
|
|||
|
|
* schema:
|
|||
|
|
* type: number
|
|||
|
|
* required: true
|
|||
|
|
* description: 经度
|
|||
|
|
* responses:
|
|||
|
|
* 200:
|
|||
|
|
* description: 逆地理编码成功
|
|||
|
|
* content:
|
|||
|
|
* application/json:
|
|||
|
|
* schema:
|
|||
|
|
* type: object
|
|||
|
|
* properties:
|
|||
|
|
* success:
|
|||
|
|
* type: boolean
|
|||
|
|
* example: true
|
|||
|
|
* result:
|
|||
|
|
* type: object
|
|||
|
|
* properties:
|
|||
|
|
* formatted_address:
|
|||
|
|
* type: string
|
|||
|
|
* description: 结构化地址
|
|||
|
|
* addressComponent:
|
|||
|
|
* type: object
|
|||
|
|
* description: 地址组成部分
|
|||
|
|
* 400:
|
|||
|
|
* description: 请求参数错误
|
|||
|
|
* 401:
|
|||
|
|
* description: 未授权
|
|||
|
|
* 500:
|
|||
|
|
* description: 服务器错误
|
|||
|
|
*/
|
|||
|
|
router.get('/reverse-geocode', verifyToken, mapController.reverseGeocode);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @swagger
|
|||
|
|
* /api/map/direction:
|
|||
|
|
* get:
|
|||
|
|
* summary: 路线规划
|
|||
|
|
* tags: [Map]
|
|||
|
|
* security:
|
|||
|
|
* - bearerAuth: []
|
|||
|
|
* parameters:
|
|||
|
|
* - in: query
|
|||
|
|
* name: origin
|
|||
|
|
* schema:
|
|||
|
|
* type: string
|
|||
|
|
* required: true
|
|||
|
|
* description: 起点坐标,格式:纬度,经度
|
|||
|
|
* - in: query
|
|||
|
|
* name: destination
|
|||
|
|
* schema:
|
|||
|
|
* type: string
|
|||
|
|
* required: true
|
|||
|
|
* description: 终点坐标,格式:纬度,经度
|
|||
|
|
* - in: query
|
|||
|
|
* name: mode
|
|||
|
|
* schema:
|
|||
|
|
* type: string
|
|||
|
|
* enum: [driving, walking, riding, transit]
|
|||
|
|
* required: false
|
|||
|
|
* description: 交通方式:driving(驾车)、walking(步行)、riding(骑行)、transit(公交)
|
|||
|
|
* responses:
|
|||
|
|
* 200:
|
|||
|
|
* description: 路线规划成功
|
|||
|
|
* content:
|
|||
|
|
* application/json:
|
|||
|
|
* schema:
|
|||
|
|
* type: object
|
|||
|
|
* properties:
|
|||
|
|
* success:
|
|||
|
|
* type: boolean
|
|||
|
|
* example: true
|
|||
|
|
* result:
|
|||
|
|
* type: object
|
|||
|
|
* description: 路线规划结果
|
|||
|
|
* 400:
|
|||
|
|
* description: 请求参数错误
|
|||
|
|
* 401:
|
|||
|
|
* description: 未授权
|
|||
|
|
* 500:
|
|||
|
|
* description: 服务器错误
|
|||
|
|
*/
|
|||
|
|
router.get('/direction', verifyToken, mapController.direction);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @swagger
|
|||
|
|
* /api/map/place-search:
|
|||
|
|
* get:
|
|||
|
|
* summary: 周边搜索
|
|||
|
|
* tags: [Map]
|
|||
|
|
* security:
|
|||
|
|
* - bearerAuth: []
|
|||
|
|
* parameters:
|
|||
|
|
* - in: query
|
|||
|
|
* name: query
|
|||
|
|
* schema:
|
|||
|
|
* type: string
|
|||
|
|
* required: true
|
|||
|
|
* description: 搜索关键词
|
|||
|
|
* - in: query
|
|||
|
|
* name: location
|
|||
|
|
* schema:
|
|||
|
|
* type: string
|
|||
|
|
* required: true
|
|||
|
|
* description: 中心点坐标,格式:纬度,经度
|
|||
|
|
* - in: query
|
|||
|
|
* name: radius
|
|||
|
|
* schema:
|
|||
|
|
* type: number
|
|||
|
|
* required: false
|
|||
|
|
* description: 搜索半径,单位:米,默认1000米
|
|||
|
|
* responses:
|
|||
|
|
* 200:
|
|||
|
|
* description: 周边搜索成功
|
|||
|
|
* content:
|
|||
|
|
* application/json:
|
|||
|
|
* schema:
|
|||
|
|
* type: object
|
|||
|
|
* properties:
|
|||
|
|
* success:
|
|||
|
|
* type: boolean
|
|||
|
|
* example: true
|
|||
|
|
* results:
|
|||
|
|
* type: array
|
|||
|
|
* items:
|
|||
|
|
* type: object
|
|||
|
|
* description: 搜索结果
|
|||
|
|
* 400:
|
|||
|
|
* description: 请求参数错误
|
|||
|
|
* 401:
|
|||
|
|
* description: 未授权
|
|||
|
|
* 500:
|
|||
|
|
* description: 服务器错误
|
|||
|
|
*/
|
|||
|
|
router.get('/place-search', verifyToken, mapController.placeSearch);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @swagger
|
|||
|
|
* /api/map/static-map:
|
|||
|
|
* get:
|
|||
|
|
* summary: 获取静态地图
|
|||
|
|
* tags: [Map]
|
|||
|
|
* security:
|
|||
|
|
* - bearerAuth: []
|
|||
|
|
* parameters:
|
|||
|
|
* - in: query
|
|||
|
|
* name: center
|
|||
|
|
* schema:
|
|||
|
|
* type: string
|
|||
|
|
* required: true
|
|||
|
|
* description: 地图中心点坐标,格式:纬度,经度
|
|||
|
|
* - in: query
|
|||
|
|
* name: width
|
|||
|
|
* schema:
|
|||
|
|
* type: number
|
|||
|
|
* required: false
|
|||
|
|
* description: 地图图片宽度,默认400
|
|||
|
|
* - in: query
|
|||
|
|
* name: height
|
|||
|
|
* schema:
|
|||
|
|
* type: number
|
|||
|
|
* required: false
|
|||
|
|
* description: 地图图片高度,默认300
|
|||
|
|
* - in: query
|
|||
|
|
* name: zoom
|
|||
|
|
* schema:
|
|||
|
|
* type: number
|
|||
|
|
* required: false
|
|||
|
|
* description: 地图缩放级别,默认12
|
|||
|
|
* responses:
|
|||
|
|
* 200:
|
|||
|
|
* description: 获取静态地图成功
|
|||
|
|
* content:
|
|||
|
|
* application/json:
|
|||
|
|
* schema:
|
|||
|
|
* type: object
|
|||
|
|
* properties:
|
|||
|
|
* success:
|
|||
|
|
* type: boolean
|
|||
|
|
* example: true
|
|||
|
|
* url:
|
|||
|
|
* type: string
|
|||
|
|
* description: 静态地图URL
|
|||
|
|
* 400:
|
|||
|
|
* description: 请求参数错误
|
|||
|
|
* 401:
|
|||
|
|
* description: 未授权
|
|||
|
|
* 500:
|
|||
|
|
* description: 服务器错误
|
|||
|
|
*/
|
|||
|
|
router.get('/static-map', verifyToken, mapController.staticMap);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @swagger
|
|||
|
|
* /api/map/ip-location:
|
|||
|
|
* get:
|
|||
|
|
* summary: IP定位
|
|||
|
|
* tags: [Map]
|
|||
|
|
* security:
|
|||
|
|
* - bearerAuth: []
|
|||
|
|
* parameters:
|
|||
|
|
* - in: query
|
|||
|
|
* name: ip
|
|||
|
|
* schema:
|
|||
|
|
* type: string
|
|||
|
|
* required: false
|
|||
|
|
* description: IP地址,可选,默认使用用户当前IP
|
|||
|
|
* responses:
|
|||
|
|
* 200:
|
|||
|
|
* description: IP定位成功
|
|||
|
|
* content:
|
|||
|
|
* application/json:
|
|||
|
|
* schema:
|
|||
|
|
* type: object
|
|||
|
|
* properties:
|
|||
|
|
* success:
|
|||
|
|
* type: boolean
|
|||
|
|
* example: true
|
|||
|
|
* result:
|
|||
|
|
* type: object
|
|||
|
|
* description: IP定位结果
|
|||
|
|
* 400:
|
|||
|
|
* description: 请求参数错误
|
|||
|
|
* 401:
|
|||
|
|
* description: 未授权
|
|||
|
|
* 500:
|
|||
|
|
* description: 服务器错误
|
|||
|
|
*/
|
|||
|
|
router.get('/ip-location', verifyToken, mapController.ipLocation);
|
|||
|
|
|
|||
|
|
module.exports = router;
|