Demanda
Los resultados del análisis remoto de imágenes de detección deben mostrarse en el mapa. La imagen de detección remota es el resultado de la inversión y coloración del algoritmo. El valor correspondiente debe obtenerse por latitud y longitud. La capa publicada en Geoserver ya tiene la función de seleccionar puntos en el mapa para obtener el valor gris, que implementa Openlayers. Aquí necesitamos encapsular esta función en una interfaz api. La siguiente figura es la interfaz de visualización openlayers de Geoserver.
Código
# -*- coding: utf-8 -*-
import warnings
from pyproj import Proj, transform
import requests
import json
from config import GeoServer
warnings.filterwarnings("ignore")
def to_bbox(lon, lat):
c = 50
x, y = transform(Proj(init='EPSG:4326'), Proj(init="EPSG:32650"), lon, lat)
return "{},{},{},{}".format(x - c, y - c, x + c, y + c)
def get_value(lon, lat, workspace, belong, indicator, time):
print(lon, lat, workspace, belong, indicator, time)
try:
layers = "{}:{}_{}_{}".format(workspace, belong, indicator, time)
bbox = to_bbox(lon, lat)
url = "{}/wms?"
"SERVICE=WMS"
"&VERSION=1.1.1"
"&REQUEST=GetFeatureInfo"
"&FORMAT=image/jpeg"
"&TRANSPARENT=true"
"&QUERY_LAYERS={}"
"&LAYERS={}"
"&exceptions=application/vnd.ogc.se_inimage"
"&INFO_FORMAT=application/json"
"&FEATURE_COUNT=50"
"&X=50"
"&Y=50"
"&SRS=EPSG:32650"
"&STYLES="
"&WIDTH=101"
"&HEIGHT=101"
"&BBOX={}".format(GeoServer, layers, layers, bbox)
print(url)
response = requests.get(url, timeout=5)
temp = json.loads(response.text)['features'][0]['properties']['GRAY_INDEX']
if temp < -2:
return 0
else:
return round(temp, 3)
except:
return 0
if __name__ == '__main__':
lon = 116.17356
lat = 34.7716
workspace = "inversion"
belong = "Wuhan"
indicator = "epidemic"
time = "2020-02"
print(get_value(lon, lat, workspace, belong, indicator, time))
Por último, introduzca la latitud y longitud correspondientes para obtener el valor gris correspondiente de la capa.
.