Commit 9430dc5a by Augusto Fonte

import sites kmz

parent 08db2e37
import fs from 'fs'; import fs from 'fs';
import AdmZip from 'adm-zip'; import * as AdmZip from 'adm-zip';
import { XMLParser } from 'fast-xml-parser'; import { XMLParser } from 'fast-xml-parser';
import { PrismaClient } from '@prisma/client'; import { PrismaClient } from '@prisma/client';
...@@ -19,13 +19,30 @@ async function importKmzToSites(kmzPath: string) { ...@@ -19,13 +19,30 @@ async function importKmzToSites(kmzPath: string) {
// 3. Extract Placemarks (handle both array and single object) // 3. Extract Placemarks (handle both array and single object)
const placemarks = (() => { const placemarks = (() => {
const doc = kml.kml.Document; const doc = kml.kml.Document;
// Check if placemarks are directly in Document
if (Array.isArray(doc.Placemark)) return doc.Placemark; if (Array.isArray(doc.Placemark)) return doc.Placemark;
if (doc.Placemark) return [doc.Placemark]; if (doc.Placemark) return [doc.Placemark];
// Check if placemarks are in a Folder
if (doc.Folder && doc.Folder.Placemark) {
if (Array.isArray(doc.Folder.Placemark)) return doc.Folder.Placemark;
return [doc.Folder.Placemark];
}
return []; return [];
})(); })();
console.log(`Found ${placemarks.length} placemarks`);
for (const placemark of placemarks) { for (const placemark of placemarks) {
const name = placemark.name || ''; const name = placemark.name || '';
if (!placemark.Point || !placemark.Point.coordinates) {
console.log('Skipping placemark without Point/coordinates:', name);
continue;
}
const [longitude, latitude] = placemark.Point.coordinates const [longitude, latitude] = placemark.Point.coordinates
.split(',') .split(',')
.map(Number); .map(Number);
...@@ -49,6 +66,8 @@ async function importKmzToSites(kmzPath: string) { ...@@ -49,6 +66,8 @@ async function importKmzToSites(kmzPath: string) {
} catch (err) { } catch (err) {
console.error(`Failed to import site ${siteCode}:`, err.message); console.error(`Failed to import site ${siteCode}:`, err.message);
} }
} else {
console.log(`Skipping invalid site: ${siteCode} (missing data)`);
} }
} }
console.log('Import complete!'); console.log('Import complete!');
......
...@@ -32,8 +32,8 @@ async function bootstrap() { ...@@ -32,8 +32,8 @@ async function bootstrap() {
// Swagger configuration // Swagger configuration
const config = new DocumentBuilder() const config = new DocumentBuilder()
.setTitle('Cellnex API') .setTitle('Setling API')
.setDescription('The Cellnex API for managing sites and candidates') .setDescription('The Setling API for managing sites and Inspections')
.setVersion('1.0') .setVersion('1.0')
.addTag('auth', 'Authentication endpoints') .addTag('auth', 'Authentication endpoints')
.addTag('users', 'User management endpoints') .addTag('users', 'User management endpoints')
...@@ -64,7 +64,7 @@ async function bootstrap() { ...@@ -64,7 +64,7 @@ async function bootstrap() {
SwaggerModule.setup('docs', app, document, swaggerOptions); SwaggerModule.setup('docs', app, document, swaggerOptions);
const port = process.env.PORT ?? 3001; const port = process.env.PORT ?? 3004;
await app.listen(port); await app.listen(port);
console.log(`Application is running on: http://localhost:${port}`); console.log(`Application is running on: http://localhost:${port}`);
console.log( console.log(
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment