chatai/postgres_15.8.1.044/nix/tests/sql/postgis.sql

53 lines
1.2 KiB
SQL

create schema v;
-- create a table to store geographic points
create table v.places (
id serial primary key,
name text,
geom geometry(point, 4326) -- using WGS 84 coordinate system
);
-- insert some sample geographic points into the places table
insert into v.places (name, geom)
values
('place_a', st_setsrid(st_makepoint(-73.9857, 40.7484), 4326)), -- latitude and longitude for a location
('place_b', st_setsrid(st_makepoint(-74.0060, 40.7128), 4326)), -- another location
('place_c', st_setsrid(st_makepoint(-73.9687, 40.7851), 4326)); -- yet another location
-- calculate the distance between two points (in meters)
select
a.name as place_a,
b.name as place_b,
st_distance(a.geom::geography, b.geom::geography) as distance_meters
from
v.places a,
v.places b
where
a.name = 'place_a'
and b.name = 'place_b';
-- find all places within a 5km radius of 'place_a'
select
name,
st_distance(
geom::geography,
(
select
geom
from
v.places
where
name = 'place_a'
)::geography) as distance_meters
from
v.places
where
st_dwithin(
geom::geography,
(select geom from v.places where name = 'place_a')::geography,
5000
)
and name != 'place_a';
drop schema v cascade;