Categorías
Otros

GeoServer obtiene el valor del punto seleccionado de la capa

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.

.

  1. Introducción a JavaSE y caso de construcción del medio ambiente

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *