Consulta precipitación PISCO v3 diaria y mensual, además de temperatura mínima y máxima diaria (Tmin/Tmax), para puntos, polígonos o multipolígonos dentro del Perú. Las respuestas JSON pueden integrarse directamente con Python, R, aplicaciones web y flujos de análisis hidrológico o geoespacial.
Base URL: https://fluviotech.com
/meteodata/pisco/monthly/series/YYYY-MM/meteodata/pisco/daily/series/YYYY-MM-DD/meteodata/api/pisco/temperature/daily/YYYY-MM-DD| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
start |
string | Sí | Fecha inicial en formato YYYY-MM. Ejemplo: 1981-01. |
end |
string | Sí | Fecha final en formato YYYY-MM. |
geometry |
GeoJSON | Sí | Geometría tipo Point, Polygon o MultiPolygon en WGS84. |
aggregation |
string | No | Para polígonos: mean o pixels. Por defecto usa mean. |
POST /meteodata/pisco/monthly/series/
{
"start": "1981-01",
"end": "2020-12",
"geometry": {
"type": "Point",
"coordinates": [-76.45, -7.25]
}
}
{
"dataset": "PISCO precipitation v3 (monthly)",
"start": "1981-01",
"end": "2020-12",
"geometry_type": "Point",
"data": [
{"date": "1981-01", "precipitation": 47.34},
{"date": "1981-02", "precipitation": 100.74}
]
}
{
"start": "1981-01",
"end": "2020-12",
"geometry": {
"type": "Polygon",
"coordinates": [[
[-75.0, -12.0],
[-74.0, -12.0],
[-74.0, -11.0],
[-75.0, -11.0],
[-75.0, -12.0]
]]
}
}
{
"dataset": "PISCO precipitation v3 (monthly)",
"geometry_type": "Polygon",
"pixels_count": 100,
"data": [
{"date": "1981-01", "precipitation_mean": 328.9},
{"date": "1981-02", "precipitation_mean": 273.15}
]
}
Recomendado para cálculos de SPI espacial, mapas de sequía o análisis distribuido por celda PISCO.
{
"start": "1981-01",
"end": "2020-12",
"aggregation": "pixels",
"geometry": {
"type": "Polygon",
"coordinates": [[
[-75.0, -12.0],
[-74.0, -12.0],
[-74.0, -11.0],
[-75.0, -11.0],
[-75.0, -12.0]
]]
}
}
{
"dataset": "PISCO precipitation v3 (monthly)",
"geometry_type": "Polygon",
"aggregation": "pixels",
"pixels_count": 51,
"records_count": 612,
"data": [
{
"date": "1981-01",
"latitude": -7.25,
"longitude": -76.45,
"precipitation": 47.34
}
]
}
Usa la misma estructura del endpoint mensual, pero las fechas deben enviarse
en formato YYYY-MM-DD.
{
"start": "1981-01-01",
"end": "1981-01-31",
"geometry": {
"type": "Polygon",
"coordinates": [[
[-75.0, -12.0],
[-74.0, -12.0],
[-74.0, -11.0],
[-75.0, -11.0],
[-75.0, -12.0]
]]
}
}
Consulta tmin y/o tmax diaria. Si se omite
variables, la API devuelve ambas. Para polígonos se admite
aggregation: "mean" o aggregation: "pixels".
{
"start": "2020-01-01",
"end": "2020-01-10",
"variables": ["tmin", "tmax"],
"geometry": {
"type": "Point",
"coordinates": [-76.45, -7.25]
}
}
{
"datasets": {
"tmin": "PISCO tmin v1 (daily)",
"tmax": "PISCO tmax v1 (daily)"
},
"start": "2020-01-01",
"end": "2020-01-10",
"geometry_type": "Point",
"requested_point": {"latitude": -7.25, "longitude": -76.45},
"nearest_pixel": {"latitude": -7.25, "longitude": -76.45},
"pixels_count": 1,
"variables": ["tmin", "tmax"],
"data": [
{"date": "2020-01-01", "tmin": 12.4, "tmax": 24.8}
]
}
Con polígonos y aggregation: "mean", la salida usa
tmin_mean y tmax_mean. Con
aggregation: "pixels", cada registro incluye fecha,
latitud, longitud y las variables solicitadas.
Ejemplos listos para copiar. Todos usan Content-Type: application/json.
curl -X POST "https://fluviotech.com/meteodata/pisco/daily/series/" \
-H "Content-Type: application/json" \
-d '{
"start":"2020-01-01",
"end":"2020-01-10",
"geometry":{"type":"Point","coordinates":[-76.45,-7.25]}
}'import json
import requests
import pandas as pd
with open("cuenca.geojson", encoding="utf-8") as f:
geo = json.load(f)
if geo.get("type") == "FeatureCollection":
geometry = geo["features"][0]["geometry"]
elif geo.get("type") == "Feature":
geometry = geo["geometry"]
else:
geometry = geo
url = "https://fluviotech.com/meteodata/pisco/monthly/series/"
payload = {
"start": "1981-01",
"end": "2020-12",
"aggregation": "mean",
"geometry": geometry,
}
response = requests.post(url, json=payload, timeout=120)
response.raise_for_status()
df = pd.DataFrame(response.json()["data"])
df["date"] = pd.to_datetime(df["date"])
print(df.head())import requests
import pandas as pd
url = "https://fluviotech.com/meteodata/api/pisco/temperature/daily/"
payload = {
"start": "2020-01-01",
"end": "2020-01-31",
"variables": ["tmin", "tmax"],
"geometry": {
"type": "Point",
"coordinates": [-76.45, -7.25],
},
}
response = requests.post(url, json=payload, timeout=120)
response.raise_for_status()
df = pd.DataFrame(response.json()["data"])
print(df.head())library(httr2)
library(jsonlite)
payload <- list(
start = "2020-01-01",
end = "2020-01-10",
geometry = list(
type = "Point",
coordinates = list(-76.45, -7.25)
)
)
resp <- request("https://fluviotech.com/meteodata/pisco/daily/series/") |>
req_body_json(payload) |>
req_perform()
x <- resp_body_json(resp, simplifyVector = TRUE)
df <- as.data.frame(x$data)
print(head(df))const response = await fetch(
"https://fluviotech.com/meteodata/pisco/daily/series/",
{
method: "POST",
headers: {"Content-Type": "application/json"},
body: JSON.stringify({
start: "2020-01-01",
end: "2020-01-10",
geometry: {
type: "Point",
coordinates: [-76.45, -7.25]
}
})
}
);
if (!response.ok) throw new Error(`HTTP ${response.status}`);
const result = await response.json();
console.log(result.data);[longitud, latitud].aggregation: "mean" para promedio espacial o "pixels" para datos distribuidos.aggregation: "pixels".aggregation: "pixels", reduzca el periodo
o divida la geometría para evitar respuestas JSON innecesariamente grandes.