0
我使用hgt數據作爲我的項目。我需要Python中的lite方法來獲取現有hgt文件的提升。如何從python中的srtm hgt文件中獲取高程
我使用hgt數據作爲我的項目。我需要Python中的lite方法來獲取現有hgt文件的提升。如何從python中的srtm hgt文件中獲取高程
def get_elevation(lat: float, lon: float) -> float:
lon_name = int(math.fabs(math.floor(lon)))
lat_name = int(math.fabs(math.floor(lat)))
vertical_hemisphere='N'
horizontal_hemisphere='E'
if lat < 0:
vertical_hemisphere='S'
if lon < 0:
horizontal_hemisphere='W'
lat_str = str(lat_name)
lon_str = str(lon_name)
if lon_name < 100:
lon_str = "0" + lon_str
if lon_name < 10:
lon_str += "0"
hgt_name = vertical_hemisphere + lat_str + horizontal_hemisphere +lon_str
extension = ".hgt"
hgt_path = "./hgtData/" + hgt_name + extension
if not os.path.isfile(hgt_path):
print("Hgt file was not found:" + hgt_path)
print("Data available for download from https://dds.cr.usgs.gov/srtm/version2_1/SRTM3")
return 0
value_offset = 2
lat_delta = math.fabs(math.fabs(lat)-math.fabs(lat_name))
lon_delta = math.fabs(math.fabs(lon)-math.fabs(lon_name))
strm_size = 1201
lat_row = int((lat_delta*strm_size))
lon_col = int((lon_delta*strm_size))
file_offset = (lon_col+strm_size*(strm_size-lat_row-1))*value_offset
with open(hgt_path, "rb") as hgt_file:
hgt_file.seek(file_offset)
buffer = hgt_file.read(value_offset)
res = int.from_bytes(buffer, byteorder="big")
return res
該方法返回hgt文件中座標爲lat lon的點的標高。 Hgt數據必須在hgtData文件夾中進行。