TNMAccess API无结果返回求助:边界框验证失败及空结果问题
TNMAccess API查询1米DEM数据无结果及边界框验证问题
我调用TNMAccess API查询Digital Elevation Model (DEM) 1 meter数据时,无论使用何种边界框参数,请求始终返回0条结果;同时通过官方文档调试页面发起请求时,边界框无法通过验证,提示“不是数字”。
调用代码
import requests API = "https://tnmaccess.nationalmap.gov/api/v1/products" def search(dataset, bbox): params = { "datasets": dataset, "bbox": bbox, "outputFormat": "JSON", "prodFormats": "GeoTIFF" } r = requests.get(API, params=params) r.raise_for_status() print(r.content) print(r.json()) return r.json()["items"] bbox = "-80.5199, 39.7198, -74.6895, 42.5167" # Pennsylvania dataset = "Digital Elevation Model (DEM) 1 meter" dem_products = search(dataset, bbox)
返回结果
{'total': 0, 'items': [], 'errors': [], 'messages': ['The offset is greater than the total number of results for this query. No items returned.'], 'sciencebaseQuery': 'https://www.sciencebase.gov/catalog/items?filter=tagslq%3D%28%28tags.scheme%3A%22The+National+Map+Collection+Thesaurus%22+AND+tags.name%3A%22Digital+Elevation+Model+%28DEM%29+1+meter%22%29+OR+%28tags.scheme%3A%223D+Elevation+Program+%283DEP%29%22+AND+tags.name%3A%22Digital+Elevation+Model+%28DEM%29+1+meter%22%29%29&filter=tagslq%3Dtags.scheme%3A%22The+National+Map+Product+Format+Thesaurus%22+AND+%28tags.name%3A+%22GeoTIFF%22%29&filter=spatialQuery%3D%7B%22wkt%22%3A%22POLYGON%28%28-80.5199++39.7198%2C+-74.6895++39.7198%2C+-74.6895++42.5167%2C-80.5199++42.5167%2C-80.5199++39.7198%29%29%22%2C%22relation%22%3A%22intersects%22%7D&max=50&offset=0&fields=id%2Ctitle%2Csummary%2Cbody%2Ctags%2CwebLinks%2Cdates%2Cspatial%2Cidentifiers&format=json&sort=title&order=asc', 'filteredOut': 0}
问题原因
- 边界框格式错误:bbox字符串中包含空格,API解析时会将带空格的内容判定为非数字,导致调试页面验证失败,同时查询无法匹配空间范围。
- 数据集名称不匹配:使用的
Digital Elevation Model (DEM) 1 meter是显示名称,而非API要求的标准标识符,导致无法正确匹配数据集。
修复方案
- 修正边界框格式:移除bbox参数中的所有空格,格式严格遵循
minlon,minlat,maxlon,maxlat。 - 使用标准数据集标识符:将
dataset参数改为"3DEP 1m DEM",这是API认可的官方标识符。
修正后的代码
import requests API = "https://tnmaccess.nationalmap.gov/api/v1/products" def search(dataset, bbox): params = { "datasets": dataset, "bbox": bbox, "outputFormat": "JSON", "prodFormats": "GeoTIFF" } r = requests.get(API, params=params) r.raise_for_status() print(r.content) print(r.json()) return r.json()["items"] # 移除边界框内的空格 bbox = "-80.5199,39.7198,-74.6895,42.5167" # Pennsylvania # 使用API标准数据集标识符 dataset = "3DEP 1m DEM" dem_products = search(dataset, bbox)
验证说明
修正后,API可正确解析边界框参数,同时精准匹配1米DEM数据集,将返回符合条件的结果;官方调试页面也能顺利通过边界框验证。
内容的提问来源于stack exchange,提问作者Noah P
相关产品推荐
相关产品推荐

