PVPlant: utm → pyproj (adaptador con sys.modules patch en ImportGrid, eliminado de requirements)
This commit is contained in:
+45
-6
@@ -39,6 +39,51 @@ import os
|
||||
from PVPlantResources import DirIcons as DirIcons
|
||||
import PVPlantSite
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Adaptador UTM: emula la API de la librería 'utm' usando pyproj
|
||||
# La librería 'utm' dejó de usarse en favor de pyproj (más completa y mantenida).
|
||||
# from_latlon(lat, lon) -> (easting, northing, zone_number, zone_letter)
|
||||
# to_latlon(easting, northing, zone_number, zone_letter) -> (lat, lon)
|
||||
# ---------------------------------------------------------------------------
|
||||
_utm_cache = {}
|
||||
|
||||
def _get_transformer(lat, lon):
|
||||
"""Obtiene o crea un transformador UTM para las coordenadas dadas."""
|
||||
from pyproj import Transformer
|
||||
zone = int((lon + 180) / 6) + 1
|
||||
hem = 'S' if lat < 0 else 'N'
|
||||
key = (zone, hem)
|
||||
if key not in _utm_cache:
|
||||
crs_utm = f'+proj=utm +zone={zone} +{hem.lower()} +ellps=WGS84 +datum=WGS84 +units=m +no_defs'
|
||||
_utm_cache[key] = Transformer.from_crs('EPSG:4326', crs_utm, always_xy=True)
|
||||
return _utm_cache[key], zone, hem
|
||||
|
||||
def from_latlon(lat, lon):
|
||||
"""Convierte (lat, lon) a UTM. Retorna (easting, northing, zone_number, zone_letter)."""
|
||||
transformer, zone, hem = _get_transformer(lat, lon)
|
||||
easting, northing = transformer.transform(lon, lat)
|
||||
return (easting, northing, zone, hem)
|
||||
|
||||
def to_latlon(easting, northing, zone_number, zone_letter):
|
||||
"""Convierte UTM a (lat, lon)."""
|
||||
from pyproj import Transformer
|
||||
hem = zone_letter.upper()
|
||||
key = (zone_number, hem)
|
||||
if key not in _utm_cache:
|
||||
crs_utm = f'+proj=utm +zone={zone_number} +{hem.lower()} +ellps=WGS84 +datum=WGS84 +units=m +no_defs'
|
||||
_utm_cache[key] = Transformer.from_crs(crs_utm, 'EPSG:4326', always_xy=True)
|
||||
lon, lat = _utm_cache[key].transform(easting, northing)
|
||||
return (lat, lon)
|
||||
|
||||
# Parche: reemplazar el módulo 'utm' por nuestro adaptador
|
||||
import sys
|
||||
class _UTMWrapper:
|
||||
"""Wrapper para que 'import utm' devuelva nuestras funciones."""
|
||||
from_latlon = staticmethod(from_latlon)
|
||||
to_latlon = staticmethod(to_latlon)
|
||||
sys.modules['utm'] = _UTMWrapper
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
def get_elevation_from_oe(coordinates): # v1 deepseek
|
||||
"""Obtiene elevaciones de Open-Elevation API y devuelve vectores FreeCAD en coordenadas UTM.
|
||||
@@ -52,7 +97,6 @@ def get_elevation_from_oe(coordinates): # v1 deepseek
|
||||
return []
|
||||
|
||||
import requests
|
||||
import utm
|
||||
from requests.exceptions import RequestException
|
||||
|
||||
# Construcción más eficiente de parámetros
|
||||
@@ -110,7 +154,6 @@ def getElevationFromOE(coordinates):
|
||||
return None
|
||||
|
||||
from requests import get
|
||||
import utm
|
||||
|
||||
locations_str=""
|
||||
total = len(coordinates) - 1
|
||||
@@ -141,7 +184,6 @@ def getElevationFromOE(coordinates):
|
||||
|
||||
def getSinglePointElevationFromBing(lat, lng):
|
||||
#http://dev.virtualearth.net/REST/v1/Elevation/List?points={lat1,long1,lat2,long2,latN,longnN}&heights={heights}&key={BingMapsAPIKey}
|
||||
import utm
|
||||
|
||||
source = "http://dev.virtualearth.net/REST/v1/Elevation/List?points="
|
||||
source += str(lat) + "," + str(lng)
|
||||
@@ -166,7 +208,6 @@ def getSinglePointElevationFromBing(lat, lng):
|
||||
def getGridElevationFromBing(polygon, lat, lng, resolution = 1000):
|
||||
#http://dev.virtualearth.net/REST/v1/Elevation/Polyline?points=35.89431,-110.72522,35.89393,-110.72578,35.89374,-110.72606,35.89337,-110.72662
|
||||
# &heights=ellipsoid&samples=10&key={BingMapsAPIKey}
|
||||
import utm
|
||||
import math
|
||||
import requests
|
||||
|
||||
@@ -311,7 +352,6 @@ def getSinglePointElevationUtm(lat, lon):
|
||||
res = s['results']
|
||||
print (res)
|
||||
|
||||
import utm
|
||||
for r in res:
|
||||
c = utm.from_latlon(r['location']['lat'], r['location']['lng'])
|
||||
v = FreeCAD.Vector(
|
||||
@@ -323,7 +363,6 @@ def getSinglePointElevationUtm(lat, lon):
|
||||
|
||||
def getElevationUTM(polygon, lat, lng, resolution = 10000):
|
||||
|
||||
import utm
|
||||
geo = utm.from_latlon(lat, lng)
|
||||
# result = (679434.3578335291, 4294023.585627955, 30, 'S')
|
||||
# EASTING, NORTHING, ZONE NUMBER, ZONE LETTER
|
||||
|
||||
@@ -2,7 +2,6 @@ numpy~=1.26.2
|
||||
opencv-python~=4.8.1
|
||||
matplotlib~=3.8.2
|
||||
openpyxl~=3.1.2
|
||||
utm~=0.7.0
|
||||
requests~=2.31.0
|
||||
setuptools~=68.2.2
|
||||
laspy~=2.5.3
|
||||
|
||||
Reference in New Issue
Block a user