tunned-geobr 1.0.3__py3-none-any.whl → 1.0.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- tunned_geobr/__init__.py +1 -0
- tunned_geobr/list_geobr.py +1 -0
- tunned_geobr/read_climate.py +85 -0
- tunned_geobr/read_sigef_properties.py +54 -20
- {tunned_geobr-1.0.3.dist-info → tunned_geobr-1.0.5.dist-info}/METADATA +1 -1
- {tunned_geobr-1.0.3.dist-info → tunned_geobr-1.0.5.dist-info}/RECORD +9 -8
- {tunned_geobr-1.0.3.dist-info → tunned_geobr-1.0.5.dist-info}/WHEEL +0 -0
- {tunned_geobr-1.0.3.dist-info → tunned_geobr-1.0.5.dist-info}/entry_points.txt +0 -0
- {tunned_geobr-1.0.3.dist-info → tunned_geobr-1.0.5.dist-info}/licenses/LICENSE.txt +0 -0
tunned_geobr/__init__.py
CHANGED
@@ -127,3 +127,4 @@ from .read_quilombola_areas import read_quilombola_areas
|
|
127
127
|
from .read_icmbio_embargoes import read_icmbio_embargoes
|
128
128
|
from .read_icmbio_infractions import read_icmbio_infractions
|
129
129
|
from .read_ibama_embargoes import read_ibama_embargoes
|
130
|
+
from .read_climate import read_climate
|
tunned_geobr/list_geobr.py
CHANGED
@@ -84,6 +84,7 @@ def list_geobr():
|
|
84
84
|
{"Function": "read_geomorphology", "Geography": "Geomorphology", "Years": "All", "Source": "IBGE"},
|
85
85
|
{"Function": "read_pedology", "Geography": "Pedology", "Years": "All", "Source": "IBGE"},
|
86
86
|
{"Function": "read_climate_aggressiveness", "Geography": "Climate Aggressiveness", "Years": "All", "Source": "IBGE"},
|
87
|
+
{"Function": "read_climate", "Geography": "Climate", "Years": "All", "Source": "IBGE"},
|
87
88
|
|
88
89
|
# Transportation and infrastructure datasets
|
89
90
|
{"Function": "read_public_aerodromes", "Geography": "Public Aerodromes", "Years": "All", "Source": "MapBiomas"},
|
@@ -0,0 +1,85 @@
|
|
1
|
+
import geopandas as gpd
|
2
|
+
import tempfile
|
3
|
+
import os
|
4
|
+
import requests
|
5
|
+
from zipfile import ZipFile
|
6
|
+
from io import BytesIO
|
7
|
+
|
8
|
+
def read_climate(simplified=False):
|
9
|
+
"""Download Brazilian Climate data from IBGE.
|
10
|
+
|
11
|
+
This function downloads and processes the Brazilian Climate data.
|
12
|
+
from IBGE (Brazilian Institute of Geography and Statistics).
|
13
|
+
Original source: IBGE - Instituto Brasileiro de Geografia e Estatística
|
14
|
+
|
15
|
+
Parameters
|
16
|
+
----------
|
17
|
+
simplified : boolean, by default False
|
18
|
+
If True, returns a simplified version of the dataset with fewer columns
|
19
|
+
|
20
|
+
Returns
|
21
|
+
-------
|
22
|
+
gpd.GeoDataFrame
|
23
|
+
Geodataframe with Brazilian climate data
|
24
|
+
|
25
|
+
Example
|
26
|
+
-------
|
27
|
+
>>> from tunned_geobr import read_climate
|
28
|
+
|
29
|
+
# Read climate data
|
30
|
+
>>> climate = read_climate()
|
31
|
+
"""
|
32
|
+
|
33
|
+
url = "https://geoftp.ibge.gov.br/informacoes_ambientais/climatologia/vetores/brasil/Clima_5000mil.zip"
|
34
|
+
|
35
|
+
try:
|
36
|
+
# Download the zip file
|
37
|
+
response = requests.get(url)
|
38
|
+
if response.status_code != 200:
|
39
|
+
raise Exception("Failed to download climate data from IBGE")
|
40
|
+
|
41
|
+
# Create a temporary directory
|
42
|
+
with tempfile.TemporaryDirectory() as temp_dir:
|
43
|
+
# Extract the zip file
|
44
|
+
with ZipFile(BytesIO(response.content)) as zip_ref:
|
45
|
+
zip_ref.extractall(temp_dir)
|
46
|
+
|
47
|
+
# Find the shapefile
|
48
|
+
shp_files = []
|
49
|
+
for root, dirs, files in os.walk(temp_dir):
|
50
|
+
shp_files.extend([os.path.join(root, f) for f in files if f.endswith('.shp')])
|
51
|
+
|
52
|
+
if not shp_files:
|
53
|
+
raise Exception("No shapefile found in the downloaded data")
|
54
|
+
|
55
|
+
# Read the shapefile
|
56
|
+
gdf = gpd.read_file(shp_files[0])
|
57
|
+
|
58
|
+
# Convert to SIRGAS 2000 (EPSG:4674) if not already
|
59
|
+
if gdf.crs is None:
|
60
|
+
gdf.crs = 4674
|
61
|
+
elif gdf.crs.to_epsg() != 4674:
|
62
|
+
gdf = gdf.to_crs(4674)
|
63
|
+
|
64
|
+
if simplified:
|
65
|
+
# Keep only the most relevant columns
|
66
|
+
# Note: Column names may need adjustment based on actual data
|
67
|
+
columns_to_keep = [
|
68
|
+
'geometry',
|
69
|
+
'NOME', # Vegetation name
|
70
|
+
'TIPO', # Vegetation type
|
71
|
+
'REGIAO', # Region
|
72
|
+
'BIOMA', # Biome
|
73
|
+
'AREA_KM2' # Area in square kilometers
|
74
|
+
]
|
75
|
+
|
76
|
+
# Filter columns that actually exist in the dataset
|
77
|
+
existing_columns = ['geometry'] + [col for col in columns_to_keep[1:] if col in gdf.columns]
|
78
|
+
gdf = gdf[existing_columns]
|
79
|
+
|
80
|
+
except Exception as e:
|
81
|
+
raise Exception(f"Error downloading vegetation data: {str(e)}")
|
82
|
+
return gdf
|
83
|
+
|
84
|
+
if __name__ == '__main__':
|
85
|
+
read_climate()
|
@@ -4,48 +4,72 @@ import os
|
|
4
4
|
import requests
|
5
5
|
from zipfile import ZipFile
|
6
6
|
from io import BytesIO
|
7
|
+
from requests.adapters import HTTPAdapter
|
8
|
+
from urllib3.util.retry import Retry
|
9
|
+
import time # Import time for potential delays between retries
|
7
10
|
|
8
11
|
def read_sigef_properties(simplified=False):
|
9
|
-
"""Download
|
10
|
-
|
11
|
-
This function downloads and processes
|
12
|
-
|
13
|
-
|
12
|
+
"""Download SIGEF Properties data from INCRA.
|
13
|
+
|
14
|
+
This function downloads and processes rural property data from INCRA's
|
15
|
+
SIGEF (Sistema de Gestão Fundiária). The dataset contains information
|
16
|
+
about rural properties registered in the SIGEF system across Brazil.
|
17
|
+
|
14
18
|
Original source: INCRA (Instituto Nacional de Colonização e Reforma Agrária)
|
15
|
-
|
19
|
+
|
16
20
|
Parameters
|
17
21
|
----------
|
18
|
-
simplified :
|
19
|
-
If True, returns a simplified version of the dataset with
|
22
|
+
simplified : bool, default False
|
23
|
+
If True, returns a simplified version of the dataset with selected columns.
|
20
24
|
|
21
25
|
Returns
|
22
26
|
-------
|
23
27
|
gpd.GeoDataFrame
|
24
|
-
|
25
|
-
|
28
|
+
GeoDataFrame with SIGEF properties data.
|
29
|
+
|
26
30
|
Example
|
27
31
|
-------
|
28
|
-
>>> from tunned_geobr import
|
29
|
-
|
30
|
-
# Read
|
31
|
-
>>> properties =
|
32
|
+
>>> from tunned_geobr import read_sigef_properties
|
33
|
+
|
34
|
+
# Read SIGEF properties data
|
35
|
+
>>> properties = read_sigef_properties()
|
32
36
|
"""
|
33
37
|
|
34
38
|
url = "https://certificacao.incra.gov.br/csv_shp/zip/Sigef%20Brasil.zip"
|
39
|
+
|
40
|
+
# Configure retries
|
41
|
+
retries = Retry(
|
42
|
+
total=5, # Total number of retries to allow
|
43
|
+
backoff_factor=1, # A backoff factor to apply between attempts (e.g., 1, 2, 4, 8 seconds)
|
44
|
+
status_forcelist=[500, 502, 503, 504], # HTTP status codes to retry on
|
45
|
+
allowed_methods={"GET"}, # Only retry GET requests
|
46
|
+
raise_on_status=False # Don't raise an exception on failed status codes immediately
|
47
|
+
)
|
48
|
+
|
49
|
+
# Create a session and mount the adapter with retries
|
50
|
+
session = requests.Session()
|
51
|
+
session.mount('https://', HTTPAdapter(max_retries=retries))
|
52
|
+
|
35
53
|
try:
|
36
|
-
# Download the zip file
|
54
|
+
# Download the zip file in chunks
|
37
55
|
# Disable SSL verification due to INCRA's certificate issues
|
38
56
|
import urllib3
|
39
57
|
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
|
40
58
|
|
41
|
-
|
42
|
-
|
43
|
-
|
59
|
+
# Use stream=True to download content in chunks with the session
|
60
|
+
response = session.get(url, stream=True, verify=False, timeout=300) # Added a timeout for the request
|
61
|
+
response.raise_for_status() # Raise an exception for HTTP errors (4xx or 5xx)
|
44
62
|
|
45
63
|
# Create a temporary directory
|
46
64
|
with tempfile.TemporaryDirectory() as temp_dir:
|
65
|
+
zip_file_path = os.path.join(temp_dir, "Sigef Brasil.zip")
|
66
|
+
# Write the content to the file
|
67
|
+
with open(zip_file_path, 'wb') as fd:
|
68
|
+
for chunk in response.iter_content(chunk_size=8192):
|
69
|
+
fd.write(chunk)
|
70
|
+
|
47
71
|
# Extract the zip file
|
48
|
-
with ZipFile(
|
72
|
+
with ZipFile(zip_file_path) as zip_ref:
|
49
73
|
zip_ref.extractall(temp_dir)
|
50
74
|
|
51
75
|
# Find the shapefile
|
@@ -75,7 +99,17 @@ def read_sigef_properties(simplified=False):
|
|
75
99
|
existing_columns = ['geometry'] + [col for col in columns_to_keep[1:] if col in gdf.columns]
|
76
100
|
gdf = gdf[existing_columns]
|
77
101
|
|
102
|
+
except requests.exceptions.Timeout:
|
103
|
+
raise Exception(f"Download timed out after {300} seconds. The file might be too large or the connection too slow.")
|
104
|
+
except requests.exceptions.ConnectionError as e:
|
105
|
+
raise Exception(f"A connection error occurred during download: {str(e)}. This might be due to network issues or server availability.")
|
106
|
+
except requests.exceptions.RequestException as e:
|
107
|
+
raise Exception(f"An unexpected request error occurred: {str(e)}")
|
78
108
|
except Exception as e:
|
79
|
-
raise Exception(f"Error
|
109
|
+
raise Exception(f"Error processing certified properties data: {str(e)}")
|
110
|
+
|
111
|
+
finally:
|
112
|
+
session.close() # Ensure the session is closed
|
80
113
|
|
81
114
|
return gdf
|
115
|
+
|
@@ -1,10 +1,10 @@
|
|
1
|
-
tunned_geobr-1.0.
|
2
|
-
tunned_geobr-1.0.
|
3
|
-
tunned_geobr-1.0.
|
4
|
-
tunned_geobr-1.0.
|
5
|
-
tunned_geobr/__init__.py,sha256=
|
1
|
+
tunned_geobr-1.0.5.dist-info/METADATA,sha256=-affpDgkILf1uDTzEkWj4GF2uYTo6yEbSEfH-pzB3po,5018
|
2
|
+
tunned_geobr-1.0.5.dist-info/WHEEL,sha256=tSfRZzRHthuv7vxpI4aehrdN9scLjk-dCJkPLzkHxGg,90
|
3
|
+
tunned_geobr-1.0.5.dist-info/entry_points.txt,sha256=6OYgBcLyFCUgeqLgnvMyOJxPCWzgy7se4rLPKtNonMs,34
|
4
|
+
tunned_geobr-1.0.5.dist-info/licenses/LICENSE.txt,sha256=mECZRcbde3HssOKe1Co4zgqBLGVN0OWpTsEy3LIbcRA,75
|
5
|
+
tunned_geobr/__init__.py,sha256=hOI1zU8GGz2yBn8S6kIAqwmICaJbTIQ3rvtjLaBgZUs,7432
|
6
6
|
tunned_geobr/data/grid_state_correspondence_table.csv,sha256=FpkBuX_-lRXQ1yBrQODxQgG9oha9Fd8A8zGKfdsDAmk,2660
|
7
|
-
tunned_geobr/list_geobr.py,sha256=
|
7
|
+
tunned_geobr/list_geobr.py,sha256=cPi2m8jZHoYE1SpYVdvkU9rjw7MzJukt5kRTsqtiwz8,17374
|
8
8
|
tunned_geobr/lookup_muni.py,sha256=ny1zU4i6OagvL4Mrc6XQWPgn2RrJa_mXlKXh81oVYsM,3462
|
9
9
|
tunned_geobr/read_ama_anemometric_towers.py,sha256=M3qKBTBYdqHzTuWtRrBiLA88Ymt6g0cf7sakJd5mTRo,4686
|
10
10
|
tunned_geobr/read_amazon.py,sha256=HiwKnYebWe3nDMDRUqHpKJIO76bA4ERm4iJlCPhagQg,1286
|
@@ -26,6 +26,7 @@ tunned_geobr/read_biomethane_plants.py,sha256=HP51IQB7KMTOzpfcXNNn3Gg95nUlTjuDat
|
|
26
26
|
tunned_geobr/read_biosphere_reserves.py,sha256=ihW5xbRpIb-vxMr4LDKSflWVCK3mn1gZb2A_GPddR7s,3147
|
27
27
|
tunned_geobr/read_cave_potential.py,sha256=P3LrYTQtfb0OpNAJCOWif9q5zrhI0PEgarEg2o8eNXc,3015
|
28
28
|
tunned_geobr/read_census_tract.py,sha256=aKSvMzfAYSR0P-TDS5xyo4XSO3NRjuYgfb_psDh3kUc,4005
|
29
|
+
tunned_geobr/read_climate.py,sha256=D2-q1vvBuhiMwqXZPCr_O12ZWNj_wyZYMe7_GaUFAG8,2973
|
29
30
|
tunned_geobr/read_climate_aggressiveness.py,sha256=Y53LYy39DNVbuVO_U3iYhyCb-Q3QQm73T2k8ZEXvtG4,2804
|
30
31
|
tunned_geobr/read_comparable_areas.py,sha256=XUOsBiDyYX5z4fj0bofD9Ty6dW4xKRY80MSo_f69Sac,2109
|
31
32
|
tunned_geobr/read_compression_stations.py,sha256=WH1edJ7FARZCDRJoIx-33olm_umIGBbVodWajgVrq3U,5337
|
@@ -122,7 +123,7 @@ tunned_geobr/read_schools.py,sha256=kxaRwuKmZDPgSuhCUd_Ltxo-6_z3b3jXY9Qo0MY_b-A,
|
|
122
123
|
tunned_geobr/read_sedimentary_basins.py,sha256=mpCde4-WRdAAuHF-AwrODd0GpxRhzJOuP60U6Zbl9pE,4583
|
123
124
|
tunned_geobr/read_semiarid.py,sha256=pxxYTWq8_UPUyblA7_FXXXRz-XOCrrebCvYQ-kgDSrU,1358
|
124
125
|
tunned_geobr/read_settlements.py,sha256=C47Wj4DhSDa-pSFfYK4uGDwtu4sUwqPMr-CuuxS95xg,3060
|
125
|
-
tunned_geobr/read_sigef_properties.py,sha256=
|
126
|
+
tunned_geobr/read_sigef_properties.py,sha256=rYdh8o_fhXom1A9wQsd5d9dKhT02wTpGRY2ACTpQZ4A,4735
|
126
127
|
tunned_geobr/read_snci_properties.py,sha256=80VUN5NesYiNTfioaw7aybLHDNpYJObQT-kV90big-c,3233
|
127
128
|
tunned_geobr/read_state.py,sha256=JgV3cR0LFbmwIzuzPbR_Zfy1bR_2eBeEPxunozctuag,3819
|
128
129
|
tunned_geobr/read_state_direct.py,sha256=8Tdz-gVH_t90BJngcfcpr0VLs5HfCUxRgRQj8hy4Bt0,3826
|
@@ -137,4 +138,4 @@ tunned_geobr/read_water_bodies_ana.py,sha256=Z-dpTPVgRHVndTeSFxx8uXn7ufMg2jm0Dlz
|
|
137
138
|
tunned_geobr/read_waterways.py,sha256=mEdoVogYWr5EYZ8bE3xMCVWyLrHYU7xTL2lUE0XbDAM,2951
|
138
139
|
tunned_geobr/read_weighting_area.py,sha256=m2X5Ua3jRqLlkqCQbIzR2jmo58pzqkyR3UYcGtgy20E,2325
|
139
140
|
tunned_geobr/utils.py,sha256=WT9PSGWvcERjj3yhfTvyWSE5ZiEjO4tYK5xIj5jJCg8,8170
|
140
|
-
tunned_geobr-1.0.
|
141
|
+
tunned_geobr-1.0.5.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|