Sări la conținutul principal

Îmbogățire punct

Acest caz de utilizare arată cum să îmbogățești locații individuale sau în batch cu date strat geospatial.

Folosești Python?

SDK-ul Python avvolează puncte finale îmbogățire într-un client tipizat — client.enrichment.enrich_single(...) și client.enrichment.enrich_batch(...).

Scenariu

Ai o listă de adrese sau coordonate și trebuie să:

  • Îmbogățești fiecare punct cu informații strat geospatial (riscuri inundații, demografie, etc.)
  • Recuperezi atribute specifice sau metrici agregate
  • Procesezi puncte singulare sau loturi mari eficient

Îmbogățire punct singular

Îmbogățește o locație unică cu date strat:

curl -X GET "https://graph.quarticle.ro/graph/featureinfo/risk-lookup/api/v1/bfi/single" \
-H "Authorization: YOUR_API_KEY" \
--data-urlencode "lat=40.7128" \
--data-urlencode "lng=-74.0060" \
--data-urlencode "layers=flood_risk,demographic_density,environmental_quality" \
--data-urlencode "operation=enhance"

Parametri:

  • lat - Latitudine (WGS84)
  • lng - Longitudine (WGS84)
  • layers - Nume straturi separate prin virgulă
  • operation - enhance pentru obține atribute, count pentru numără caracteristici

Răspuns:

{
"location": {"lat": 40.7128, "lng": -74.0060},
"layers": {
"flood_risk": {
"risk_level": "medium",
"return_period": "100_year",
"depth_cm": 45
},
"demographic_density": {
"population": 42500,
"density_per_sq_km": 15800
}
}
}

Îmbogățire puncte batch

Îmbogățește mai multe puncte în o singură cerere:

{
"points": [
{"id": "prop_001", "lat": 40.7128, "lng": -74.0060},
{"id": "prop_002", "lat": 40.7250, "lng": -74.0100},
{"id": "prop_003", "lat": 40.7400, "lng": -74.0050}
],
"layers": ["flood_risk", "seismic_risk", "demographic_density"],
"operation": "enhance"
}

Răspuns:

[
{
"id": "prop_001",
"location": {"lat": 40.7128, "lng": -74.0060},
"enrichment": {
"flood_risk": {...},
"seismic_risk": {...},
"demographic_density": {...}
}
}
]

Exemple cod

Punct singular (JavaScript)

async function enrichSinglePoint(lat, lng, layers) {
const apiKey = process.env.QARTA_API_KEY;

const params = new URLSearchParams({
lat: lat,
lng: lng,
layers: layers.join(','),
operation: 'enhance'
});

const response = await fetch(
`https://graph.quarticle.ro/graph/featureinfo/risk-lookup/api/v1/bfi/single?${params}`,
{
method: 'GET',
headers: {
'Authorization': `${apiKey}`
}
}
);

const enriched = await response.json();
console.log(JSON.stringify(enriched, null, 2));
return enriched;
}

// Utilizare
const result = await enrichSinglePoint(
40.7128,
-74.0060,
['flood_risk', 'demographic_density', 'environmental_quality']
);

Îmbogățire batch (JavaScript)

async function enrichBatchPoints(properties, layers) {
const apiKey = process.env.QARTA_API_KEY;

const request = {
points: properties.map(p => ({
id: p.id,
lat: p.latitude,
lng: p.longitude
})),
layers: layers,
operation: 'enhance'
};

const response = await fetch(
'https://graph.quarticle.ro/graph/featureinfo/enrichment/api/v1/bfi/batch',
{
method: 'POST',
headers: {
'Authorization': `${apiKey}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(request)
}
);

const enriched = await response.json();

enriched.forEach(item => {
console.log(`${item.id}: Enriched with ${Object.keys(item.enrichment).length} layers`);
});

return enriched;
}

// Utilizare
const properties = [
{ id: 'prop_001', latitude: 40.7128, longitude: -74.0060 },
{ id: 'prop_002', latitude: 40.7250, longitude: -74.0100 }
];

const enriched = await enrichBatchPoints(
properties,
['flood_risk', 'seismic_risk', 'demographic_density']
);

Îmbogățire batch din CSV (Python)

import requests
import json
import csv

def enrich_properties_from_csv(csv_file, output_file):
api_key = os.getenv('QARTA_API_KEY')

# Citește CSV
properties = []
with open(csv_file, 'r') as f:
reader = csv.DictReader(f)
for row in reader:
properties.append({
'id': row['property_id'],
'latitude': float(row['lat']),
'longitude': float(row['lon'])
})

# Îmbogățire batch
request_body = {
'points': [
{'id': p['id'], 'lat': p['latitude'], 'lng': p['longitude']}
for p in properties
],
'layers': ['flood_risk', 'demographic_density'],
'operation': 'enhance'
}

response = requests.post(
'https://graph.quarticle.ro/graph/featureinfo/enrichment/api/v1/bfi/batch',
headers={
'Authorization': f'{api_key}',
'Content-Type': 'application/json'
},
json=request_body
)

enriched_data = response.json()

# Scrie rezultate în fișier
with open(output_file, 'w') as f:
json.dump(enriched_data, f, indent=2)

print(f'Enriched {len(enriched_data)} properties')

# Utilizare
enrich_properties_from_csv('properties.csv', 'enriched_properties.json')

Operație numărare

În loc de îmbogățire, numără caracteristici în straturi:

curl -X GET "https://graph.quarticle.ro/graph/featureinfo/risk-lookup/api/v1/bfi/single" \
-H "Authorization: YOUR_API_KEY" \
--data-urlencode "lat=40.7128" \
--data-urlencode "lng=-74.0060" \
--data-urlencode "layers=flood_zones,environmental_areas" \
--data-urlencode "operation=count"

Procesare loturi mari

Pentru mii de puncte, procesează în loturi mai mici:

async function enrichLargeDataset(properties, batchSize = 1000) {
const apiKey = process.env.QARTA_API_KEY;
const results = [];

for (let i = 0; i < properties.length; i += batchSize) {
const batch = properties.slice(i, i + batchSize);
console.log(`Processing batch ${Math.floor(i / batchSize) + 1}...`);

const request = {
points: batch.map(p => ({
id: p.id,
lat: p.lat,
lng: p.lng
})),
layers: ['flood_risk', 'demographic_density'],
operation: 'enhance'
};

const response = await fetch(
'https://graph.quarticle.ro/graph/featureinfo/enrichment/api/v1/bfi/batch',
{
method: 'POST',
headers: {
'Authorization': `${apiKey}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(request)
}
);

const enriched = await response.json();
results.push(...enriched);

// Adaugă întârziere între loturi
await new Promise(resolve => setTimeout(resolve, 500));
}

return results;
}

const allProperties = [...]; // Lista de 10,000+ proprietăți
const enriched = await enrichLargeDataset(allProperties, 1000);

Cazuri de utilizare

  • Evaluare proprietăți - Încorporează date riscuri/demografie în modele prețuri
  • Screening investiții - Filtrează proprietăți după atribute îmbogățite
  • Evaluare riscuri asigurare - Evaluează riscuri de mediu și catastrofe naturale
  • Analiză marketing - Țintă proprietăți în zone demografice specifice
  • Îmbogățire portofoliu - Adaugă date context la înregistrări proprietăți
  • Due diligence - Evaluează mai multe locații rapid

Gestionare erori

async function enrichWithErrorHandling(lat, lng, layers) {
try {
const params = new URLSearchParams({
lat, lng,
layers: layers.join(','),
operation: 'enhance'
});

const response = await fetch(
`https://graph.quarticle.ro/graph/featureinfo/risk-lookup/api/v1/bfi/single?${params}`,
{ headers: { 'Authorization': `${apiKey}` } }
);

if (response.status === 400) {
console.error('Invalid coordinates or layers');
return null;
}

if (response.status === 401) {
console.error('Authentication failed');
return null;
}

return await response.json();

} catch (error) {
console.error('Enrichment failed:', error);
return null;
}
}

Pași următori