3 votos

Centro de un cuadro delimitador

Tengo las coordenadas del cuadro delimitador de mi shapefile
(obtenido de layer.GetExtent() Python con GDAL/OGR):

(-38.6102467739459, -38.017601026186576, 33.01563382506067, 33.624945228091406)

Así que asumo que son los puntos SW y NE del rectángulo.

Me gustaría averiguar el centro de este rectángulo (en lat/lon).
¿Cómo debo proceder?

7voto

Steven Parkes Puntos 625

Para un bbox pequeño, en un sistema de coordenadas long/lat, puedes suponer que la tierra es plana en esa zona y puedes utilizar la media de x e y:

 >>> coords = (-38.6102467739459, -38.017601026186576, 33.01563382506067, 33.624945228091406)

 >>> centerx,centery = ( numpy.average(coords[:2]),numpy.average(coords[2:]))

 >>> centerx,centery
(-38.313923900066243, 33.320289526576033)

4voto

Adam Ernst Puntos 6939

Calcula la anchura y la altura de la caja restando una esquina de la otra y luego añade la mitad de la anchura al borde izquierdo y la mitad de la altura al borde inferior.

0voto

Steven Parkes Puntos 625

Puede utilizar st_box2 y st_centroide funciones

select
          st_astext(st_centroid(st_box2d(
                                st_geomfromtext('LINESTRING(-38.6102467739459 33.624945228091406, -38.017601026186576 33.01563382506067)',4326)
                                                )
                                )
                    ) CENTER;

                   center 
------------------------------------------  
 POINT(-38.3139239000662 33.320289526576)

Ten cuidado con el orden en que introduces las coordenadas.

0voto

user1013346 Puntos 121

Como continuación a la respuesta de @ian-turton, a continuación un ejemplo de cómo obtener las coordenadas centrales de un WMS [como ejemplo fácilmente reproducible para obtener unas coordenadas reales de "Oeste, Sur, Este, Norte"].

from owslib.wms import WebMapService

wms_url="http://wms.pcn.minambiente.it/ogc?map=/ms_ogc/WMS_v1.3/raster/de_agostini.map"

wms = WebMapService(wms_url, version="1.3.0")

def get_center(wms):
    # list(wms.contents)[0] <- get the first available layer from the WMS
    # wms.contents['layer']..boundingBoxWGS84 <- the the box bounds
    w, s, e, n = wms.contents[list(wms.contents)[0]].boundingBoxWGS84
    # get the box width 
    width = max(w, e) - min(w, e)
    # get the box height 
    height = max(s, n) - min(s, n)
    # compute the center
    center = round(min(s, n)+height/2, 4), round(min(w, e)+width/2, 4)
    return center

get_center(wms)

# (41.0603, 13.2123)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X