tunned-geobr 1.0.9__py3-none-any.whl → 1.0.11__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 CHANGED
@@ -130,3 +130,4 @@ from .read_ibama_embargoes import read_ibama_embargoes
130
130
  from .read_climate import read_climate
131
131
  from .read_exploration_blocks import read_exploration_blocks
132
132
  from .read_production_fields import read_production_fields
133
+ from .read_oil_wells import read_oil_wells
@@ -140,6 +140,7 @@ def list_geobr():
140
140
  # Energy infrastructure datasets - Oil and Gas Infrastructure
141
141
  {"Function": "read_exploration_blocks", "Geography": "Oil and Gas Exploration Blocks", "Years": "All", "Source": "ANP"},
142
142
  {"Function": "read_production_fields", "Geography": "Oil and Gas Production Fields", "Years": "All", "Source": "ANP"},
143
+ {"Function": "read_oil_wells", "Geography": "Oil and Gas Wells", "Years": "All", "Source": "ANP"},
143
144
  {"Function": "read_fuel_bases", "Geography": "Fuel Bases", "Years": "All", "Source": "EPE"},
144
145
  {"Function": "read_glp_bases", "Geography": "GLP (LPG) Bases", "Years": "All", "Source": "EPE"},
145
146
  {"Function": "read_processing_facilities", "Geography": "Oil and Gas Processing Facilities", "Years": "All", "Source": "EPE"},
@@ -0,0 +1,87 @@
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_oil_wells(simplified=False):
9
+ """Download Brazilian Oil and Gas Wells data from ANP.
10
+
11
+ This function downloads and processes the Brazilian Oil and Gas Wells data
12
+ from ANP (National Petroleum Agency).
13
+ Original source: ANP - Agência Nacional do Petróleo, Gás Natural e Biocombustíveis
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 oil and gas wells data
24
+
25
+ Example
26
+ -------
27
+ >>> from tunned_geobr import read_oil_wells
28
+
29
+ # Read oil wells data
30
+ >>> wells = read_oil_wells()
31
+ """
32
+
33
+ url = "https://gishub.anp.gov.br/geoserver/BD_ANP/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=BD_ANP%3APOCOS_SIRGAS&maxFeatures=40000&outputFormat=SHAPE-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 oil wells data from ANP")
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 based on typical ANP data structure
67
+ columns_to_keep = [
68
+ 'geometry',
69
+ 'NOME', # Well name
70
+ 'OPERADOR', # Operator
71
+ 'BACIA', # Basin
72
+ 'CAMPO', # Field
73
+ 'SITUACAO', # Status
74
+ 'CATEGORIA' # Category
75
+ ]
76
+
77
+ # Filter columns that actually exist in the dataset
78
+ existing_columns = ['geometry'] + [col for col in columns_to_keep[1:] if col in gdf.columns]
79
+ gdf = gdf[existing_columns]
80
+
81
+ except Exception as e:
82
+ raise Exception(f"Error downloading oil wells data: {str(e)}")
83
+
84
+ return gdf
85
+
86
+ if __name__ == '__main__':
87
+ read_oil_wells()
@@ -0,0 +1,164 @@
1
+ import geopandas as gpd
2
+ import os
3
+ import tempfile
4
+ import urllib.parse
5
+ import requests
6
+ import shutil
7
+ from zipfile import ZipFile
8
+ from pathlib import Path
9
+ from io import BytesIO
10
+ import warnings
11
+ import json
12
+
13
+ def read_sigel_wind_turbines(simplified=False, verbose=False):
14
+ """Download Wind Turbines data from Sigel.
15
+
16
+ This function downloads and processes wind turbines data from Sigel (ANEEL).
17
+ Original source: ANEEL (Agência Nacional de Energia Elétrica)
18
+
19
+ Parameters
20
+ ----------
21
+ simplified : boolean, by default False
22
+ If True, returns a simplified version of the dataset with fewer columns
23
+ verbose : boolean, by default False
24
+ If True, prints detailed information about the download process
25
+
26
+ Returns
27
+ -------
28
+ gpd.GeoDataFrame
29
+ Geodataframe with wind turbines data
30
+
31
+ Example
32
+ -------
33
+ >>> from tunned_geobr import read_sigel_wind_turbines
34
+
35
+ # Read wind turbines data
36
+ >>> wind_turbines = read_sigel_wind_turbines()
37
+ """
38
+
39
+ # URL for the Sigel geoserver WFS service
40
+ url = r'https://sigel.aneel.gov.br/arcgis/rest/services/PORTAL/ExtractDataTaskAneel/GPServer/Extract%20Data%20Task/execute?f=json&env:outSR=102100&Layers_to_Clip=["Aerogeradores"]&Area_of_Interest={"geometryType":"esriGeometryPolygon","features":[{"geometry":{"rings":[[[-10056193.304181412,-5207437.87749587],[-10056193.304181412,2052245.3209151002],[-2405152.5209504515,2052245.3209151002],[-2405152.5209504515,-5207437.87749587],[-10056193.304181412,-5207437.87749587]]],"spatialReference":{"wkid":102100}}}],"sr":{"wkid":102100}}&Feature_Format=Shapefile - SHP - .shp&Raster_Format=Tagged Image File Format - TIFF - .tif'
41
+
42
+ try:
43
+ # Disable SSL verification warning
44
+ warnings.filterwarnings('ignore', message='Unverified HTTPS request')
45
+
46
+ if verbose:
47
+ print("Requesting data from Sigel server...")
48
+
49
+ response = requests.get(url, timeout=60, verify=False)
50
+ if not response.ok:
51
+ raise Exception(f"Error getting JSON response: {response.status_code}")
52
+
53
+ json_response = response.json()
54
+
55
+ if verbose:
56
+ print(f"JSON response received: {json.dumps(json_response, indent=2)[:500]}...")
57
+
58
+ if 'results' not in json_response or len(json_response['results']) == 0:
59
+ raise Exception("Invalid JSON response structure")
60
+
61
+ if 'value' not in json_response['results'][0] or 'url' not in json_response['results'][0]['value']:
62
+ raise Exception("URL not found in JSON response")
63
+
64
+ file_url = json_response['results'][0]['value']['url']
65
+
66
+ if verbose:
67
+ print(f"Downloading file from: {file_url}")
68
+
69
+ file_response = requests.get(file_url, stream=True, timeout=60, verify=False)
70
+ if not file_response.ok:
71
+ raise Exception(f"Error downloading file: {file_response.status_code}")
72
+
73
+ # Check if content is actually a zip file
74
+ content = file_response.content
75
+ if len(content) < 100:
76
+ if verbose:
77
+ print(f"Warning: Downloaded content is very small ({len(content)} bytes)")
78
+ print(f"Content preview: {content[:100]}")
79
+
80
+ # Create a temporary directory to extract the files
81
+ with tempfile.TemporaryDirectory() as temp_dir:
82
+ if verbose:
83
+ print(f"Extracting files to temporary directory: {temp_dir}")
84
+
85
+ try:
86
+ # Extract the zip file
87
+ with ZipFile(BytesIO(content)) as zip_ref:
88
+ zip_ref.extractall(temp_dir)
89
+
90
+ if verbose:
91
+ print(f"Files in zip: {zip_ref.namelist()}")
92
+ except Exception as zip_error:
93
+ if verbose:
94
+ print(f"Error extracting zip: {str(zip_error)}")
95
+ print(f"Saving content to debug.zip for inspection")
96
+ with open("debug.zip", "wb") as f:
97
+ f.write(content)
98
+ raise Exception(f"Failed to extract zip file: {str(zip_error)}")
99
+
100
+ # Find the shapefile
101
+ all_files = os.listdir(temp_dir)
102
+ if verbose:
103
+ print(f"Files in temp directory: {all_files}")
104
+
105
+ shp_files = [f for f in all_files if f.endswith('.shp')]
106
+ if not shp_files:
107
+ # Try looking in subdirectories
108
+ for root, dirs, files in os.walk(temp_dir):
109
+ shp_files.extend([os.path.join(root, f) for f in files if f.endswith('.shp')])
110
+
111
+ if not shp_files:
112
+ raise Exception("No shapefile found in the downloaded data")
113
+
114
+ # Read the shapefile
115
+ shp_path = shp_files[0] if os.path.isabs(shp_files[0]) else os.path.join(temp_dir, shp_files[0])
116
+ if verbose:
117
+ print(f"Reading shapefile: {shp_path}")
118
+
119
+ gdf = gpd.read_file(shp_path)
120
+
121
+ # Convert to SIRGAS 2000 (EPSG:4674)
122
+ gdf = gdf.to_crs(4674)
123
+
124
+ if verbose:
125
+ print(f"Data loaded successfully with {len(gdf)} records")
126
+ print(f"Columns: {gdf.columns.tolist()}")
127
+
128
+ if simplified:
129
+ # Keep only the most relevant columns based on actual data structure
130
+ columns_to_keep = [
131
+ 'geometry',
132
+ # Add relevant columns for wind turbines here, e.g.,
133
+ # 'nome', # Plant name
134
+ # 'potencia', # Power capacity
135
+ # 'leilao', # Auction
136
+ # 'ceg', # CEG code
137
+ # 'ano_prev' # Expected year
138
+ ]
139
+
140
+ # Filter columns that actually exist in the dataset
141
+ existing_columns = ['geometry'] + [col for col in columns_to_keep[1:] if col in gdf.columns]
142
+ if len(existing_columns) <= 1:
143
+ if verbose:
144
+ print("Warning: No matching columns found for simplified version. Returning all columns.")
145
+ else:
146
+ gdf = gdf[existing_columns]
147
+
148
+ except Exception as e:
149
+ raise Exception(f"Error downloading or processing wind turbines data: {str(e)}")
150
+
151
+ return gdf
152
+
153
+ if __name__ == '__main__':
154
+ try:
155
+ wind_turbines_data = read_sigel_wind_turbines(verbose=True)
156
+ print(f"Downloaded wind turbines data with {len(wind_turbines_data)} records and {len(wind_turbines_data.columns)} columns")
157
+
158
+ # Test simplified version
159
+ simplified_data = read_sigel_wind_turbines(simplified=True)
160
+ print(f"Simplified data has {len(simplified_data.columns)} columns: {simplified_data.columns.tolist()}")
161
+ except Exception as e:
162
+ print(f"Error: {str(e)}")
163
+ import traceback
164
+ traceback.print_exc()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tunned-geobr
3
- Version: 1.0.9
3
+ Version: 1.0.11
4
4
  Summary: Fork personalizado do geobr com funcionalidades extras como download de dados da ANM
5
5
  Author: Anderson Stolfi
6
6
  License: MIT
@@ -1,10 +1,10 @@
1
- tunned_geobr-1.0.9.dist-info/METADATA,sha256=9kwtRWvanWUDEw9kf_cxgQfNxKlT5zt9p0Z1f02QVDQ,5018
2
- tunned_geobr-1.0.9.dist-info/WHEEL,sha256=tSfRZzRHthuv7vxpI4aehrdN9scLjk-dCJkPLzkHxGg,90
3
- tunned_geobr-1.0.9.dist-info/entry_points.txt,sha256=6OYgBcLyFCUgeqLgnvMyOJxPCWzgy7se4rLPKtNonMs,34
4
- tunned_geobr-1.0.9.dist-info/licenses/LICENSE.txt,sha256=mECZRcbde3HssOKe1Co4zgqBLGVN0OWpTsEy3LIbcRA,75
5
- tunned_geobr/__init__.py,sha256=b2xOTqV-FDT-L-Tc3Us1c_XydiHF-HEqAKTbSvWXCEo,7552
1
+ tunned_geobr-1.0.11.dist-info/METADATA,sha256=-OD5dmaWBgTi2LdFztCAK1lC9T7Ry8TFHnqMoiUJ7wM,5019
2
+ tunned_geobr-1.0.11.dist-info/WHEEL,sha256=tSfRZzRHthuv7vxpI4aehrdN9scLjk-dCJkPLzkHxGg,90
3
+ tunned_geobr-1.0.11.dist-info/entry_points.txt,sha256=6OYgBcLyFCUgeqLgnvMyOJxPCWzgy7se4rLPKtNonMs,34
4
+ tunned_geobr-1.0.11.dist-info/licenses/LICENSE.txt,sha256=mECZRcbde3HssOKe1Co4zgqBLGVN0OWpTsEy3LIbcRA,75
5
+ tunned_geobr/__init__.py,sha256=FU_YkEkjkMlq6J2AxEV8WQLFFiGDIXj37Vyjz_hWNdQ,7595
6
6
  tunned_geobr/data/grid_state_correspondence_table.csv,sha256=FpkBuX_-lRXQ1yBrQODxQgG9oha9Fd8A8zGKfdsDAmk,2660
7
- tunned_geobr/list_geobr.py,sha256=n7bAi7O4QYdceAsfhI9M4mJ7zP1SbO5YS8iT1MQ-d9M,17654
7
+ tunned_geobr/list_geobr.py,sha256=MaPOra0n2wPuakB-IPwK33x9uyXCWH5sjDb3D7eIQhk,17761
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
@@ -96,6 +96,7 @@ tunned_geobr/read_og_probabilistic_effective_basin.py,sha256=ftdY--3rZJwhCfbuQUL
96
96
  tunned_geobr/read_og_total_ipa.py,sha256=0Tz4x7ZD7bRvXiLR2AitAmx-hQEVxAzNugfg2o0L3gc,5300
97
97
  tunned_geobr/read_og_unconventional_resources.py,sha256=97lUpkJQtBZTUb4oPdvT9wxlm2yj6euWzLR4oGiezrc,5444
98
98
  tunned_geobr/read_oil_and_derivatives_terminal.py,sha256=-BzLd9WpWWgH1pUaz9y16rg54FbZgUqJ_YTqbFak_7Y,5385
99
+ tunned_geobr/read_oil_wells.py,sha256=WeM4OY1x3KSdmdY2hQqCxlcvYySmsaCaICplRxulNUg,3080
99
100
  tunned_geobr/read_pan_strategic_areas 2.py,sha256=alORMUQbnW_ER3_uOzqTbUaSyr-Y3Mg_bsoykxiGDMA,2654
100
101
  tunned_geobr/read_pan_strategic_areas.py,sha256=EP-Qtx_q4lE3lsNNIUaoQc5j-9aKBkxY2BizTwWY3ZY,3375
101
102
  tunned_geobr/read_pedology.py,sha256=xk_yOxIOVTHip4kj2y1xgO4fHKn8e1dv2cNOayXCtKk,2783
@@ -126,6 +127,7 @@ tunned_geobr/read_sedimentary_basins.py,sha256=mpCde4-WRdAAuHF-AwrODd0GpxRhzJOuP
126
127
  tunned_geobr/read_semiarid.py,sha256=pxxYTWq8_UPUyblA7_FXXXRz-XOCrrebCvYQ-kgDSrU,1358
127
128
  tunned_geobr/read_settlements.py,sha256=C47Wj4DhSDa-pSFfYK4uGDwtu4sUwqPMr-CuuxS95xg,3060
128
129
  tunned_geobr/read_sigef_properties.py,sha256=rYdh8o_fhXom1A9wQsd5d9dKhT02wTpGRY2ACTpQZ4A,4735
130
+ tunned_geobr/read_sigel_wind_turbines.py,sha256=uobMxbB4M_npQfoGGkYKuImoFxaNy_OpNT1ZDLlUjzs,7112
129
131
  tunned_geobr/read_snci_properties.py,sha256=80VUN5NesYiNTfioaw7aybLHDNpYJObQT-kV90big-c,3233
130
132
  tunned_geobr/read_state.py,sha256=JgV3cR0LFbmwIzuzPbR_Zfy1bR_2eBeEPxunozctuag,3819
131
133
  tunned_geobr/read_state_direct.py,sha256=8Tdz-gVH_t90BJngcfcpr0VLs5HfCUxRgRQj8hy4Bt0,3826
@@ -140,4 +142,4 @@ tunned_geobr/read_water_bodies_ana.py,sha256=Z-dpTPVgRHVndTeSFxx8uXn7ufMg2jm0Dlz
140
142
  tunned_geobr/read_waterways.py,sha256=mEdoVogYWr5EYZ8bE3xMCVWyLrHYU7xTL2lUE0XbDAM,2951
141
143
  tunned_geobr/read_weighting_area.py,sha256=m2X5Ua3jRqLlkqCQbIzR2jmo58pzqkyR3UYcGtgy20E,2325
142
144
  tunned_geobr/utils.py,sha256=WT9PSGWvcERjj3yhfTvyWSE5ZiEjO4tYK5xIj5jJCg8,8170
143
- tunned_geobr-1.0.9.dist-info/RECORD,,
145
+ tunned_geobr-1.0.11.dist-info/RECORD,,