2017-06-06 65 views

回答

0
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文件夾中進行。