Dobra. Zaczynając.
Uruchamiamy https://github.com/RicoElectrico/ChangesetMD (z moją poprawką dla changesetów o zerowym obszarze). Import z indeksowaniem pewnie potrwa 7 godzin. Używamy oczywiście opcji -g.
Potem https://github.com/RicoElectrico/NoteMD do tej samej bazy. Także z -g.
Robimy parę pierdółek:
create index changeset_area_idx on osm_changeset using ST_Area(geom); --Możliwe, że nie jest konieczny
create view note_ex as
select n.*, c.comment_user_id, c.comment_user_name, c.comment_text
from note n, note_comment c
where n.id = comment_note_id and c.comment_action='opened';
A tu właściwa część:
CREATE TABLE mapsme_notes AS
select a.* from note_ex a,
(SELECT distinct(n.id)
FROM note_ex n,
osm_changeset c
WHERE ST_Area(c.geom) < 1e-9
AND ST_DWithin(n.geom, c.geom, 1e-6)
AND (n.comment_user_id = c.user_id
OR n.comment_user_id IS NULL)
AND c.tags->'created_by' LIKE 'MAPS.ME%'
AND n.closed_at IS NULL) b where a.id = b.id;
I to by było na tyle, żeby dostać wyniki. Dalej to kwestia obróbki.
Mam nadzieję, że nie przeoczyłem żadnego indeksu. Trzeba by popatrzeć w EXPLAIN na świeżej tabeli.
Województwa wziąłem z BDOO, bo miałem pod ręką, ale można je wziąć skądkolwiek, choćby z bazy zapełnionej przez osm2pgsql (select name, way from planet_osm_polygon where “admin_level” = ‘4’; )- i odpowiednio zmodyfikować klauzulę “geokodującą”
Tutaj zapisuję do pliku.
\copy (select 'http://osm.org/note/'|| a.id::text as link, a.created_at, (select nazwa from granice g where ST_Intersects(a.geom,g.geom) and g.rodzaj='Woj' order by nazwa limit 1) as woj, a.comment_user_name, a.comment_text from mapsme_notes a, granice g where ST_Intersects(a.geom,g.geom) and g.rodzaj='Woj';
) to mapsme_pl.csv with csv
@Mateusz Konieczny Bardzo prosiłbym o przetestowanie. Możliwe, że coś przeoczyłem.