Generar Reportes de Mercado
Los reportes complementan tus avalúos con
datos contextuales sobre la zona. Imagina poder mostrar a tus clientes no solo el valor de la propiedad, sino también el análisis demográfico, comercial y regulatorio de la zona.La Anatomía de un Reporte
Un reporte se compone de secciones independientes. Cada sección tiene su propio endpoint y proporciona datos específicos:
1. Datos de Población
Obtén información demográfica y socioeconómica de la zona.
Para obtener datos de población, consulta la documentación en la Referencia de API: Datos estadísticos y gráficos.
Ejemplo de uso:
curl -X GET "https://api.placeanalyzer.com/report/population?lat=-34.6037&lng=-58.3816" \
-H "X-API-KEY: tu_api_key_aqui"Respuesta:
{ "location": { "lat": -34.6037, "lng": -58.3816, "zoneName": "Palermo" }, "population": { "total": 256788, "density": 12500, "ageDistribution": { "0-14": 15.2, "15-29": 22.1, "30-44": 25.8, "45-59": 20.3, "60+": 16.6 }, "socioeconomicLevel": { "A": 12.5, "B": 28.7, "C": 45.2, "D": 13.6 } } }
¿Cómo usar estos datos?
- 📊 Gráficos de edad: Crear histogramas de distribución etaria
- 💰 Nivel socioeconómico: Mostrar composición de la zona
- 🏠 Densidad poblacional: Contextualizar el entorno
2. Análisis Comercial
Descubre qué comercios y servicios hay cerca de la propiedad.
Para obtener análisis comercial para gráficos, consulta la documentación en la Referencia de API: Datos estadísticos y gráficos.
Ejemplo de uso:
curl -X GET "https://api.placeanalyzer.com/report/commerce-graphic?lat=-34.6037&lng=-58.3816" \
-H "X-API-KEY: tu_api_key_aqui"Respuesta:
{ "location": { "lat": -34.6037, "lng": -58.3816, "zoneName": "Palermo" }, "commerceAnalysis": { "totalCommerces": 1250, "byCategory": { "RESTAURANTS": 25.2, "SHOPS": 18.8, "SERVICES": 15.4, "HEALTH": 12.1, "EDUCATION": 8.9, "ENTERTAINMENT": 7.3, "TRANSPORT": 6.2, "FINANCIAL": 3.8, "OTHER": 2.3 }, "topCommerces": [ { "name": "Starbucks Palermo", "category": "RESTAURANTS", "rating": 4.2, "distance": 0.3 }, { "name": "Banco Galicia", "category": "FINANCIAL", "rating": 3.8, "distance": 0.5 } ] } }
Gráfico de Torta con estos datos:
// Datos para gráfico de torta const commerceData = { labels: ['Restaurantes', 'Tiendas', 'Servicios', 'Salud', 'Educación'], datasets: [{ data: [25.2, 18.8, 15.4, 12.1, 8.9], backgroundColor: ['#FF6384', '#36A2EB', '#FFCE56', '#4BC0C0', '#9966FF'] }] };
3. Plan Regulador
Información urbanística y normativa de la zona.
Para obtener información del plan regulador, consulta la documentación en la Referencia de API: Viewer.
Ejemplo de uso:
curl -X GET "https://api.placeanalyzer.com/report/regulatory-plan?lat=-34.6037&lng=-58.3816" \
-H "X-API-KEY: tu_api_key_aqui"Respuesta:
{ "location": { "lat": -34.6037, "lng": -58.3816, "zoneName": "Palermo" }, "regulatoryInfo": { "zoning": "R2B1", "zoningDescription": "Residencial con comercio en planta baja", "allowedUses": [ "RESIDENTIAL", "COMMERCIAL_GROUND_FLOOR", "OFFICES", "SERVICES" ], "buildingRestrictions": { "maxHeight": 25, "maxFAR": 3.5, "minFrontSetback": 3, "maxLotCoverage": 0.7 }, "specialDistricts": [ "HISTORIC_PRESERVATION" ] } }
4. Análisis por Categorías Comerciales
Detalla el comercio por rubros específicos.
Para obtener comercios filtrados por categoría, consulta la documentación en la Referencia de API: Comercios.
Ejemplo - Solo restaurantes:
curl -X GET "https://api.placeanalyzer.com/report/commerces-by-category?lat=-34.6037&lng=-58.3816&category=RESTAURANTS" \
-H "X-API-KEY: tu_api_key_aqui"5. Análisis por Sectores
Comercio organizado por zonas geográficas.
Para obtener análisis comercial por sectores geográficos, consulta la documentación en la Referencia de API: Comercios.
Ejemplo Completo: Reporte Integral
Aquí tienes un ejemplo que combina múltiples endpoints para crear un reporte completo:
async function generateCompleteReport(lat, lng, apiKey) { console.log('📊 Generando reporte completo...'); try { // Ejecutar todas las consultas en paralelo const [population, commerce, regulatory] = await Promise.all([ fetch(`{REPORT_API_URL}/population?lat=${lat}&lng=${lng}`, { headers: { 'X-API-KEY': apiKey } }), fetch(`{REPORT_API_URL}/commerce-graphic?lat=${lat}&lng=${lng}`, { headers: { 'X-API-KEY': apiKey } }), fetch(`{REPORT_API_URL}/regulatory-plan?lat=${lat}&lng=${lng}`, { headers: { 'X-API-KEY': apiKey } }) ]); const [populationData, commerceData, regulatoryData] = await Promise.all([ population.json(), commerce.json(), regulatory.json() ]); // Combinar todos los datos const report = { location: populationData.location, sections: { population: populationData.population, commerce: commerceData.commerceAnalysis, regulatory: regulatoryData.regulatoryInfo } }; console.log('✅ Reporte generado exitosamente'); return report; } catch (error) { console.error('❌ Error generando reporte:', error); throw error; } } // Uso del ejemplo generateCompleteReport(-34.6037, -58.3816, 'tu_api_key_aqui') .then(report => { console.log('Zona:', report.location.zoneName); console.log('Población total:', report.sections.population.total); console.log('Total comercios:', report.sections.commerce.totalCommerces); console.log('Zonificación:', report.sections.regulatory.zoning); });
Mejores Prácticas para Reportes
1. Cache Inteligente
// Cachear reportes por 24 horas const CACHE_TTL = 24 * 60 * 60 * 1000; // 24 horas en ms class ReportCache { constructor() { this.cache = new Map(); } async getReport(lat, lng) { const key = `${lat},${lng}`; const cached = this.cache.get(key); if (cached && Date.now() - cached.timestamp < CACHE_TTL) { return cached.data; } const report = await generateCompleteReport(lat, lng, API_KEY); this.cache.set(key, { data: report, timestamp: Date.now() }); return report; } }
2. Manejo de Errores por Sección
async function generateReportWithFallbacks(lat, lng, apiKey) { const sections = {}; // Intentar obtener cada sección independientemente try { const populationResponse = await fetch(`.../population?lat=${lat}&lng=${lng}`, { headers: { 'X-API-KEY': apiKey } }); sections.population = await populationResponse.json(); } catch (error) { sections.population = { error: 'No disponible' }; } // Repetir para otras secciones... return sections; }
3. Reportes Programados
Para propiedades que consultas frecuentemente:
// Generar reporte y guardar en base de datos async function scheduleReport(propertyId, lat, lng) { const report = await generateCompleteReport(lat, lng, API_KEY); await saveToDatabase(propertyId, { report: report, generatedAt: new Date(), expiresAt: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000) // 7 días }); return report; }
Conclusión
Los reportes transforman una simple tasación en un análisis integral que incluye:
- 👥 Contexto demográfico de la zona
- 🏪 Análisis comercial completo
- 📋 Información regulatoria para desarrollo
- 🏠 Comparación con propiedades cercanas
Próximos pasos:
- 📊 Datos estadísticos para análisis demográfico
- 📍 Propiedades cercanas para análisis comparativo
- ⚡ Optimizar consultas con cache y reintentos
¿Necesitas ayuda con algún endpoint específico? Consulta la referencia completa de API.