Ajustes rota get itineraries in radius
This commit is contained in:
3
src/constants/mapRadiusConfig.ts
Normal file
3
src/constants/mapRadiusConfig.ts
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
const maxRadius = 10
|
||||||
|
|
||||||
|
export default maxRadius
|
||||||
@@ -1,16 +1,14 @@
|
|||||||
import { Router } from 'express';
|
import { Router } from 'express';
|
||||||
import { getRepository } from 'typeorm';
|
import { getRepository } from 'typeorm';
|
||||||
import axios from 'axios'
|
|
||||||
|
|
||||||
import AppError from '../errors/AppError';
|
|
||||||
import Itinerary from '../models/Itinerary';
|
import Itinerary from '../models/Itinerary';
|
||||||
import CalculateDistanceBetweenCoords from '../services/CalculateDistanceBetweenCoords';
|
import CalculateDistanceBetweenCoords from '../services/CalculateDistanceBetweenCoords';
|
||||||
import CreateItineraryService from '../services/CreateItineraryService';
|
import CreateItineraryService from '../services/CreateItineraryService';
|
||||||
import NeighborhoodServed from '../models/NeighborhoodServed';
|
|
||||||
import Destination from '../models/Destination';
|
|
||||||
|
|
||||||
import testData from "../constants/itineraryExample"
|
import testData from "../constants/itineraryExample"
|
||||||
|
|
||||||
|
import maxRadius from '../constants/mapRadiusConfig';
|
||||||
|
|
||||||
const itinerariesRouter = Router();
|
const itinerariesRouter = Router();
|
||||||
|
|
||||||
itinerariesRouter.get('/', async (request, response) => {
|
itinerariesRouter.get('/', async (request, response) => {
|
||||||
@@ -76,48 +74,39 @@ itinerariesRouter.post('/examples', async (request, response) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
itinerariesRouter.post('/inradius', async (request, response) => {
|
itinerariesRouter.post('/inradius', async (request, response) => {
|
||||||
const { coordinatesFrom, coordinatesTo } = request.body;
|
const { coordinatesOrigin, coordinatesDestination } = request.body;
|
||||||
console.log(coordinatesFrom, coordinatesTo);
|
|
||||||
|
|
||||||
let lat_from: number = +coordinatesFrom.lat;
|
const itinerariesRepository = getRepository(Itinerary);
|
||||||
let lng_from: number = +coordinatesFrom.lng;
|
// console.log(coordinatesOrigin, coordinatesDestiny);
|
||||||
let lat_to: number = +coordinatesTo.lat;
|
|
||||||
let lng_to: number = +coordinatesTo.lng;
|
|
||||||
|
|
||||||
const { data, status } = await axios.get<Itinerary[]>(
|
const lat_from: number = +coordinatesOrigin.lat;
|
||||||
'https://630d4f7fb37c364eb702a43d.mockapi.io/vehiclemos/itineraries',
|
const lng_from: number = +coordinatesOrigin.lng;
|
||||||
{
|
const lat_to: number = +coordinatesDestination.lat;
|
||||||
headers: {
|
const lng_to: number = +coordinatesDestination.lng;
|
||||||
Accept: 'application/json',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
if (status !== 200) {
|
const itineraries = await itinerariesRepository.find();
|
||||||
throw new AppError('Não foi possível recuperar a lista de modelos do veículo informado.', 200);
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log(data)
|
let transportsFiltered = itineraries.filter(itinerary => {
|
||||||
|
if (!itinerary.neighborhoodsServed || !itinerary.destinations) return false
|
||||||
|
|
||||||
// "data" é a lista de itinerários
|
|
||||||
let transportsFiltered = data.filter(x => {
|
|
||||||
var distance = 0;
|
var distance = 0;
|
||||||
var distance2 = 0;
|
var distance2 = 0;
|
||||||
for (const i of x.bairros_atendidos) {
|
|
||||||
let lat2: number = +i.lat;
|
for (const neighborhoodServed of itinerary.neighborhoodsServed) {
|
||||||
let lng2: number = +i.lgn;
|
let lat2: number = +neighborhoodServed.latitude;
|
||||||
|
let lng2: number = +neighborhoodServed.longitude;
|
||||||
distance = CalculateDistanceBetweenCoords({ lat1: lat_from, lng1: lng_from, lat2, lng2 });
|
distance = CalculateDistanceBetweenCoords({ lat1: lat_from, lng1: lng_from, lat2, lng2 });
|
||||||
if (distance <= 10) break;
|
if (distance <= maxRadius) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const j of x.destinos) {
|
for (const destination of itinerary.destinations) {
|
||||||
let lat2: number = +j.lat;
|
let lat2: number = +destination.latitude;
|
||||||
let lng2: number = +j.lgn;
|
let lng2: number = +destination.longitude;
|
||||||
distance2 = CalculateDistanceBetweenCoords({ lat1: lat_to, lng1: lng_to, lat2, lng2 });
|
distance2 = CalculateDistanceBetweenCoords({ lat1: lat_to, lng1: lng_to, lat2, lng2 });
|
||||||
if (distance2 <= 10) break;
|
if (distance2 <= maxRadius) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (distance <= 10 && distance2 <= 10);
|
return (distance <= maxRadius && distance2 <= maxRadius);
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log(transportsFiltered)
|
console.log(transportsFiltered)
|
||||||
|
|||||||
Reference in New Issue
Block a user