53 lines
1.2 KiB
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;
|