3 votos

Geofencing con PostGIS

Me gustaría informarme sobre los barcos dentro de la zona designada, la siguiente imagen:

enter image description here

La latitud y longitud trazadas son

118.868653 32.199966,
118.873224 32.192503,
118.876336 32.184894,
118.872967 32.183551,
118.868901 32.188654,
118.866492 32.193383,
118.864319 32.198767

código sql

create table ship_location(
    id          integer default nextval('ship_location_seq'::regclass) not null
        primary key,
    site_id     varchar(64),
    mmsi        varchar(64),
    lon_str     varchar(64),
    lat_str     varchar(64),
    create_time timestamp,
    m_location  geometry(Point, 4326)
);

select ST_MakePolygon(ST_GeomFromText('LINESTRING (118.868653 32.199966,118.873224 32.192503,118.876336 32.184894,118.872967 32.183551,118.868901 32.188654,118.866492 32.193383,118.864319 32.198767) '))

mensaje de error

[XX000] ERROR: lwpoly_from_lwlines: shell must be closed

¿Qué debo hacer ahora?

6voto

Anton8000 Puntos 165

Tu línea debe terminar en el mismo punto en el que comienza para crear un polígono a partir de ella:

select ST_MakePolygon(ST_GeomFromText('LINESTRING (118.868653 32.199966,118.873224 32.192503,118.876336 32.184894,118.872967 32.183551,118.868901 32.188654,118.866492 32.193383,118.864319 32.198767, 118.868653 32.199966), 4326'))

A continuación, puede seleccionar los buques dentro de ella de esta manera:

select * from ship_location
where st_intersects(m_location, 
    ST_MakePolygon(ST_GeomFromText('LINESTRING (118.868653 32.199966,118.873224 32.192503,118.876336 32.184894,118.872967 32.183551,118.868901 32.188654,118.866492 32.193383,118.864319 32.198767, 118.868653 32.199966), 4326')))

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