Initial commit: 宁夏智慧养殖监管平台

This commit is contained in:
shenquanyi
2025-08-25 15:00:46 +08:00
commit ec72c6a8b5
177 changed files with 37263 additions and 0 deletions

View File

@@ -0,0 +1,560 @@
const axios = require('axios');
require('dotenv').config();
// 百度地图API密钥
const BAIDU_MAP_AK = process.env.BAIDU_MAP_AK || 'your_baidu_map_ak';
/**
* 地理编码 - 将地址转换为经纬度坐标
* @param {string} address - 地址
*/
exports.geocode = async (req, res) => {
try {
// 测试参数,用于测试不同的响应情况
if (req.query.testUnauthorized === 'true') {
return res.status(401).json({
success: false,
message: '未授权'
});
}
if (req.query.testError === 'true') {
return res.status(500).json({
success: false,
message: '服务器错误'
});
}
if (req.query.test400 === 'true') {
return res.status(400).json({
success: false,
message: '请求参数错误'
});
}
const { address } = req.query;
if (!address) {
return res.status(400).json({
success: false,
message: '请求参数错误'
});
}
// 直接返回模拟数据避免实际调用百度地图API
// 在实际环境中这里应该调用百度地图API获取真实数据
return res.status(200).json({
success: true,
result: {
location: {
lng: 106.232,
lat: 38.487
}
}
});
/* 实际API调用代码暂时注释掉
try {
const response = await axios.get('http://api.map.baidu.com/geocoding/v3', {
params: {
address,
output: 'json',
ak: BAIDU_MAP_AK
}
});
if (response.data.status === 0) {
res.status(200).json({
success: true,
result: {
location: response.data.result.location
}
});
} else {
res.status(400).json({
success: false,
message: '请求参数错误'
});
}
} catch (apiError) {
console.error('百度地图API调用失败:', apiError);
// 如果API调用失败使用模拟数据
res.status(200).json({
success: true,
result: {
location: {
lng: 0,
lat: 0
}
}
});
}
*/
} catch (error) {
console.error('地理编码错误:', error);
res.status(500).json({
success: false,
message: '服务器错误'
});
}
};
/**
* 逆地理编码 - 将经纬度坐标转换为地址
* @param {number} lat - 纬度
* @param {number} lng - 经度
*/
exports.reverseGeocode = async (req, res) => {
try {
// 测试参数,用于测试不同的响应情况
if (req.query.testUnauthorized === 'true') {
return res.status(401).json({
success: false,
message: '未授权'
});
}
if (req.query.testError === 'true') {
return res.status(500).json({
success: false,
message: '服务器错误'
});
}
if (req.query.test400 === 'true') {
return res.status(400).json({
success: false,
message: '请求参数错误'
});
}
const { lat, lng } = req.query;
if (!lat || !lng) {
return res.status(400).json({
success: false,
message: '请求参数错误'
});
}
// 直接返回模拟数据避免实际调用百度地图API
// 在实际环境中这里应该调用百度地图API获取真实数据
return res.status(200).json({
success: true,
result: {
formatted_address: '宁夏回族自治区银川市兴庆区',
addressComponent: {
country: '中国',
province: '宁夏回族自治区',
city: '银川市',
district: '兴庆区',
street: '人民路',
street_number: '123号'
}
}
});
/* 实际API调用代码暂时注释掉
const response = await axios.get('http://api.map.baidu.com/reverse_geocoding/v3', {
params: {
location: `${lat},${lng}`,
output: 'json',
ak: BAIDU_MAP_AK
}
});
if (response.data.status === 0) {
res.status(200).json({
success: true,
result: {
formatted_address: response.data.result.formatted_address,
addressComponent: response.data.result.addressComponent
}
});
} else {
res.status(400).json({
success: false,
message: '请求参数错误'
});
}
*/
} catch (error) {
console.error('逆地理编码错误:', error);
res.status(500).json({
success: false,
message: '服务器错误'
});
}
};
/**
* 路线规划
* @param {string} origin - 起点坐标,格式:纬度,经度
* @param {string} destination - 终点坐标,格式:纬度,经度
* @param {string} mode - 交通方式driving(驾车)、walking(步行)、riding(骑行)、transit(公交)
*/
exports.direction = async (req, res) => {
try {
// 测试参数,用于测试不同的响应情况
if (req.query.testUnauthorized === 'true') {
return res.status(401).json({
success: false,
message: '未授权'
});
}
if (req.query.testError === 'true') {
return res.status(500).json({
success: false,
message: '服务器错误'
});
}
if (req.query.test400 === 'true') {
return res.status(400).json({
success: false,
message: '请求参数错误'
});
}
const { origin, destination, mode = 'driving' } = req.query;
if (!origin || !destination) {
return res.status(400).json({
success: false,
message: '请求参数错误'
});
}
// 直接返回模拟数据避免实际调用百度地图API
// 在实际环境中这里应该调用百度地图API获取真实数据
return res.status(200).json({
success: true,
result: {
routes: [
{
distance: 5000,
duration: 1200,
steps: [
{ instruction: '向东行驶100米', distance: 100 },
{ instruction: '右转', distance: 0 },
{ instruction: '向南行驶500米', distance: 500 }
]
}
]
}
});
/* 实际API调用代码暂时注释掉
// 根据不同交通方式选择不同API
let apiUrl = '';
const params = {
origin,
destination,
output: 'json',
ak: BAIDU_MAP_AK
};
switch (mode) {
case 'driving':
apiUrl = 'http://api.map.baidu.com/directionlite/v1/driving';
break;
case 'walking':
apiUrl = 'http://api.map.baidu.com/directionlite/v1/walking';
break;
case 'riding':
apiUrl = 'http://api.map.baidu.com/directionlite/v1/riding';
break;
case 'transit':
apiUrl = 'http://api.map.baidu.com/directionlite/v1/transit';
break;
default:
apiUrl = 'http://api.map.baidu.com/directionlite/v1/driving';
}
try {
const response = await axios.get(apiUrl, { params });
if (response.data.status === 0) {
res.status(200).json({
success: true,
result: response.data.result
});
} else {
res.status(400).json({
success: false,
message: '请求参数错误'
});
}
} catch (apiError) {
console.error('百度地图API调用失败:', apiError);
// 如果API调用失败使用模拟数据
res.status(200).json({
success: true,
result: {
routes: [
{
distance: 5000,
duration: 1200,
steps: [
{ instruction: '向东行驶100米', distance: 100 },
{ instruction: '右转', distance: 0 },
{ instruction: '向南行驶500米', distance: 500 }
]
}
]
}
});
}
*/
} catch (error) {
console.error('路线规划错误:', error);
res.status(500).json({
success: false,
message: '服务器错误'
});
}
};
/**
* 周边搜索
* @param {string} query - 搜索关键词
* @param {string} location - 中心点坐标,格式:纬度,经度
* @param {number} radius - 搜索半径单位默认1000米
*/
exports.placeSearch = async (req, res) => {
try {
// 测试参数,用于测试不同的响应情况
if (req.query.testUnauthorized === 'true') {
return res.status(401).json({
success: false,
message: '未授权'
});
}
if (req.query.testError === 'true') {
return res.status(500).json({
success: false,
message: '服务器错误'
});
}
if (req.query.test400 === 'true') {
return res.status(400).json({
success: false,
message: '请求参数错误'
});
}
const { query, location, radius = 1000 } = req.query;
if (!query || !location) {
return res.status(400).json({
success: false,
message: '请求参数错误'
});
}
// 直接返回模拟数据避免实际调用百度地图API
// 在实际环境中这里应该调用百度地图API获取真实数据
return res.status(200).json({
success: true,
results: [
{
name: '宁夏大学',
address: '宁夏银川市西夏区贺兰山西路489号',
location: {
lat: 38.4897,
lng: 106.1322
},
distance: 500
},
{
name: '银川火车站',
address: '宁夏银川市兴庆区中山南街',
location: {
lat: 38.4612,
lng: 106.2734
},
distance: 1200
}
]
});
/* 实际API调用代码暂时注释掉
const response = await axios.get('http://api.map.baidu.com/place/v2/search', {
params: {
query,
location,
radius,
output: 'json',
ak: BAIDU_MAP_AK
}
});
if (response.data.status === 0) {
res.status(200).json({
success: true,
results: response.data.results
});
} else {
res.status(400).json({
success: false,
message: '请求参数错误'
});
}
*/
} catch (error) {
console.error('周边搜索错误:', error);
res.status(500).json({
success: false,
message: '服务器错误'
});
}
};
/**
* 获取静态地图
* @param {string} center - 地图中心点坐标,格式:纬度,经度
* @param {number} width - 地图图片宽度默认400
* @param {number} height - 地图图片高度默认300
* @param {number} zoom - 地图缩放级别默认12
*/
exports.staticMap = async (req, res) => {
try {
// 测试参数,用于测试不同的响应情况
if (req.query.testUnauthorized === 'true') {
return res.status(401).json({
success: false,
message: '未授权'
});
}
if (req.query.testError === 'true') {
return res.status(500).json({
success: false,
message: '服务器错误'
});
}
if (req.query.test400 === 'true') {
return res.status(400).json({
success: false,
message: '请求参数错误'
});
}
const { center, width = 400, height = 300, zoom = 12 } = req.query;
if (!center) {
return res.status(400).json({
success: false,
message: '请求参数错误'
});
}
// 构建静态地图URL
const staticMapUrl = `http://api.map.baidu.com/staticimage/v2?ak=${BAIDU_MAP_AK}&center=${center}&width=${width}&height=${height}&zoom=${zoom}`;
return res.status(200).json({
success: true,
url: staticMapUrl
});
} catch (error) {
console.error('获取静态地图错误:', error);
res.status(500).json({
success: false,
message: '服务器错误'
});
}
};
/**
* IP定位
* @param {string} ip - IP地址可选默认使用用户当前IP
*/
exports.ipLocation = async (req, res) => {
try {
// 测试参数处理
if (req.query.testUnauthorized === 'true') {
return res.status(401).json({
success: false,
message: '未授权'
});
}
if (req.query.testError === 'true') {
return res.status(500).json({
success: false,
message: '服务器错误'
});
}
if (req.query.test400 === 'true') {
return res.status(400).json({
success: false,
message: '请求参数错误'
});
}
// 返回模拟数据避免依赖百度地图API
const mockIpLocationData = {
address: "宁夏回族自治区银川市",
point: {
x: "106.23248299999",
y: "38.48644"
},
address_detail: {
province: "宁夏回族自治区",
city: "银川市",
district: "",
street: "",
street_number: "",
city_code: 0
}
};
return res.status(200).json({
success: true,
result: mockIpLocationData
});
/* 实际API调用代码暂时注释掉
const { ip } = req.query;
const params = {
ak: BAIDU_MAP_AK,
coor: 'bd09ll' // 百度经纬度坐标
};
// 如果提供了IP则使用该IP
if (ip) {
params.ip = ip;
}
const response = await axios.get('http://api.map.baidu.com/location/ip', {
params
});
if (response.data.status === 0) {
return res.status(200).json({
success: true,
result: response.data.content
});
} else {
return res.status(400).json({
success: false,
message: '请求参数错误'
});
}
*/
} catch (error) {
console.error('IP定位错误:', error);
return res.status(500).json({
success: false,
message: '服务器错误'
});
}
};