tunned-geobr 1.0.12__py3-none-any.whl → 1.0.13__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.
@@ -108,6 +108,7 @@ def list_geobr():
108
108
  {"Function": "read_existent_eolic", "Geography": "Existing Wind Power Plants", "Years": "All", "Source": "EPE"},
109
109
  {"Function": "read_planned_eolic", "Geography": "Planned Wind Power Plants", "Years": "All", "Source": "EPE"},
110
110
  {"Function": "read_sigel_wind_turbines", "Geography": "Wind Turbines", "Years": "All", "Source": "ANEEL"},
111
+ {"Function": "read_sigel_windpower_transmission_lines", "Geography": "Wind Power Transmission Lines", "Years": "All", "Source": "ANEEL"},
111
112
 
112
113
  # Energy infrastructure datasets - Hydroelectric
113
114
  {"Function": "read_existent_uhe", "Geography": "Existing Large Hydroelectric Plants", "Years": "All", "Source": "EPE"},
@@ -0,0 +1,159 @@
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_windpower_transmission_lines(simplified=False, verbose=False):
14
+ """Download Wind Power Transmission Lines data from Sigel.
15
+
16
+ This function downloads and processes wind power transmission lines 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 power transmission lines data
30
+
31
+ Example
32
+ -------
33
+ >>> from tunned_geobr import read_sigel_windpower_transmission_lines
34
+
35
+ # Read wind power transmission lines data
36
+ >>> transmission_lines = read_sigel_windpower_transmission_lines()
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=["Linha de Transmissão EOL"]&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 power transmission lines here
133
+ ]
134
+
135
+ # Filter columns that actually exist in the dataset
136
+ existing_columns = ['geometry'] + [col for col in columns_to_keep[1:] if col in gdf.columns]
137
+ if len(existing_columns) <= 1:
138
+ if verbose:
139
+ print("Warning: No matching columns found for simplified version. Returning all columns.")
140
+ else:
141
+ gdf = gdf[existing_columns]
142
+
143
+ except Exception as e:
144
+ raise Exception(f"Error downloading or processing wind power transmission lines data: {str(e)}")
145
+
146
+ return gdf
147
+
148
+ if __name__ == '__main__':
149
+ try:
150
+ transmission_lines_data = read_sigel_windpower_transmission_lines(verbose=True)
151
+ print(f"Downloaded wind power transmission lines data with {len(transmission_lines_data)} records and {len(transmission_lines_data.columns)} columns")
152
+
153
+ # Test simplified version
154
+ simplified_data = read_sigel_windpower_transmission_lines(simplified=True)
155
+ print(f"Simplified data has {len(simplified_data.columns)} columns: {simplified_data.columns.tolist()}")
156
+ except Exception as e:
157
+ print(f"Error: {str(e)}")
158
+ import traceback
159
+ traceback.print_exc()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tunned-geobr
3
- Version: 1.0.12
3
+ Version: 1.0.13
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.12.dist-info/METADATA,sha256=NK0n2LkAIXbFapLm05jxSdq3YArfGJ3hXVErhHNFFnI,5019
2
- tunned_geobr-1.0.12.dist-info/WHEEL,sha256=tSfRZzRHthuv7vxpI4aehrdN9scLjk-dCJkPLzkHxGg,90
3
- tunned_geobr-1.0.12.dist-info/entry_points.txt,sha256=6OYgBcLyFCUgeqLgnvMyOJxPCWzgy7se4rLPKtNonMs,34
4
- tunned_geobr-1.0.12.dist-info/licenses/LICENSE.txt,sha256=mECZRcbde3HssOKe1Co4zgqBLGVN0OWpTsEy3LIbcRA,75
1
+ tunned_geobr-1.0.13.dist-info/METADATA,sha256=eIYbgP7gEIs9CNy1YznkQPqPX6WrTO2GchLrculnKjk,5019
2
+ tunned_geobr-1.0.13.dist-info/WHEEL,sha256=tSfRZzRHthuv7vxpI4aehrdN9scLjk-dCJkPLzkHxGg,90
3
+ tunned_geobr-1.0.13.dist-info/entry_points.txt,sha256=6OYgBcLyFCUgeqLgnvMyOJxPCWzgy7se4rLPKtNonMs,34
4
+ tunned_geobr-1.0.13.dist-info/licenses/LICENSE.txt,sha256=mECZRcbde3HssOKe1Co4zgqBLGVN0OWpTsEy3LIbcRA,75
5
5
  tunned_geobr/__init__.py,sha256=uJlPQ19Go17jJdK7sYNkx5qT6ZJGalp6CNYHrI-_kdg,7658
6
6
  tunned_geobr/data/grid_state_correspondence_table.csv,sha256=FpkBuX_-lRXQ1yBrQODxQgG9oha9Fd8A8zGKfdsDAmk,2660
7
- tunned_geobr/list_geobr.py,sha256=C9eRBooIcCKOdCCcCqcU8Yi0RIBXS_WM6LPW93Rfb7E,17876
7
+ tunned_geobr/list_geobr.py,sha256=XJthEzXnmOZvImnRfAE3Fu-2J4ayTiYBGyqNx4N25pc,18022
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
@@ -128,6 +128,7 @@ tunned_geobr/read_semiarid.py,sha256=pxxYTWq8_UPUyblA7_FXXXRz-XOCrrebCvYQ-kgDSrU
128
128
  tunned_geobr/read_settlements.py,sha256=C47Wj4DhSDa-pSFfYK4uGDwtu4sUwqPMr-CuuxS95xg,3060
129
129
  tunned_geobr/read_sigef_properties.py,sha256=rYdh8o_fhXom1A9wQsd5d9dKhT02wTpGRY2ACTpQZ4A,4735
130
130
  tunned_geobr/read_sigel_wind_turbines.py,sha256=uobMxbB4M_npQfoGGkYKuImoFxaNy_OpNT1ZDLlUjzs,7112
131
+ tunned_geobr/read_sigel_windpower_transmission_lines.py,sha256=pCyDZ7wrHwcb1j76tHMGW9tmRWUriHFSyXNxoF9zDvY,7077
131
132
  tunned_geobr/read_snci_properties.py,sha256=80VUN5NesYiNTfioaw7aybLHDNpYJObQT-kV90big-c,3233
132
133
  tunned_geobr/read_state.py,sha256=JgV3cR0LFbmwIzuzPbR_Zfy1bR_2eBeEPxunozctuag,3819
133
134
  tunned_geobr/read_state_direct.py,sha256=8Tdz-gVH_t90BJngcfcpr0VLs5HfCUxRgRQj8hy4Bt0,3826
@@ -142,4 +143,4 @@ tunned_geobr/read_water_bodies_ana.py,sha256=Z-dpTPVgRHVndTeSFxx8uXn7ufMg2jm0Dlz
142
143
  tunned_geobr/read_waterways.py,sha256=mEdoVogYWr5EYZ8bE3xMCVWyLrHYU7xTL2lUE0XbDAM,2951
143
144
  tunned_geobr/read_weighting_area.py,sha256=m2X5Ua3jRqLlkqCQbIzR2jmo58pzqkyR3UYcGtgy20E,2325
144
145
  tunned_geobr/utils.py,sha256=WT9PSGWvcERjj3yhfTvyWSE5ZiEjO4tYK5xIj5jJCg8,8170
145
- tunned_geobr-1.0.12.dist-info/RECORD,,
146
+ tunned_geobr-1.0.13.dist-info/RECORD,,