Files
nxxmdata/backend/routes/map.js

333 lines
9.0 KiB
JavaScript
Raw Normal View History

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;