CREATE TABLE poi_comarca_count AS
WITH poi_comarca AS (SELECT
"ETIQUETA" AS poi,
"TIPO_0504" AS poi_type,
"PRIMARYIND" AS id,
c.comarca,AS poi_geom,
p.geom AS comarca_geom
c.geom FROM
AS p
poi_castellon LEFT JOIN
AS c
castellon_comarcas_pop_2017 ON st_intersects(p.geom, st_transform(c.geom,25830)))
SELECT
comarca,count(*) AS count_poi,
poi_comarca.comarca_geomFROM
poi_comarcaGROUP BY comarca,poi_comarca.comarca_geom;
Groupping POI by regions in PostgreSQL: Castellon’s POI by regions
Transform
PostGIS
QGIS
TYC GIS-IMFE
Exercise 3: JOINS
The exercise 3 requires to:
- Calculate the total number of point of interest (POI) for each region.
- Indicate which is the closest POI to each urban center.
Layers to be used:
- Nucleos_castellon.shp (urban centers)
- Lugares_interes_castellon.shp (POI)
- MUNICIPIOS.shp. (municipalities)
Exercise A
PostGIS
Total number of points of interest (POI) per region
Closest POI for each urban center.
CREATE TABLE poi_urban_center AS
SELECT DISTINCT ON (urban_center)
"ETIQUETA" AS urban_center,
uc.
poi.poi,round(st_centroid(uc.geom) <-> poi.poi_geom) AS distance,
as urban_center_geom,
st_centroid(uc.geom) AS poi_geom
poi.poi_geom FROM
urbancenter_castellon ucLEFT JOIN LATERAL
SELECT
("ETIQUETA" AS poi,
AS poi_geom
geom FROM poi_castellon poi
ORDER BY poi.geom <-> st_centroid(uc.geom)
LIMIT 1) AS poi ON true;
QGIS
Total number of points of interest (POI) per region
Closest POI for each urban center.
Exercise B
PostGIS
Calculate the total number of bird sightings for each municipality
CREATE TABLE sigthings_municipalities AS
SELECT
study_area.etiqueta,count(aves.*),
study_area.geom FROM
AS aves
general_postgis JOIN
AS study_area
ambito_estudio ON st_intersects(aves.geom, study_area.geom)
GROUP BY
study_area.etiqueta, study_area.geom;
For Imfe
For this case, it is the council of the city center of Málaga which provides the data.
The layers used are:
Total number of points of interest (POI) per region
CREATE TABLE agp_city_libraries AS
SELECT
"NOMBARRIO" AS neighbor,
n.count(l.id) AS total_library,
AS geom_neighbor
n.geom FROM agp_city_library AS l
JOIN agp_city_neighbor AS n
ON st_intersects(l.geom, n.geom)
GROUP BY "NOMBARRIO", n.geom
ORDER BY total_library DESC;
Closest POI for each urban center.
CREATE TABLE library_bus_agp AS
WITH agp_geom_bus AS
SELECT
(*,
st_transform(
st_setsrid(:double precision, lat::double precision),4326),25830) AS geom
st_point(lon:FROM agp_city_bus)
SELECT DISTINCT ON (l."NOMBRE")
"nombreParada" AS bus_stop,
bs."NOMBRE" AS library,
l.round(l.geom <-> bs.geom) AS distance,
AS library_geom,
l.geom AS bus_geom
bs.geom FROM agp_city_library AS l
LEFT JOIN LATERAL
SELECT
(*
FROM agp_geom_bus AS b
ORDER BY b.geom <-> l.geom
LIMIT 1) AS bs ON true;