osmberlin / osm-parking-processing

Processing pipeline to generate data on public parking from OpenStreetMap-Data.
https://parkraum.osm-verkehrswende.org/project-vector-tiles/
GNU Affero General Public License v3.0
18 stars 2 forks source link

Neue Region: Metzingen #94

Closed Metzor closed 1 month ago

Metzor commented 1 year ago

Hallo,

Metzingen wird bis Ende 2024 ein neues Mobilitätskonzept erarbeiten inklusive Bürgerbeteiligung. Daher würde ich mich freuen, wenn ihr Metzingen Relation: Metzingen (2774075) als neue Region mit aufnehmen würdet. Parkraumerfassung läuft - zum Glück alles etwas übersichtlicher als Berlin ;-)

Ich hatte auch versucht, den Docker-Container bei mir zum Laufen zu bringen mit den entsprechen latest osm.pbf von geofabrik, aber beim processign kam immer dieser Fehler in den logs:

psql:/config/process_osm.sql:68: ERROR: transform: Point outside of projection domain (2050)

Auch wenn ich ich die (geojson) Region auf Berlin beschränkt habe und nur das Berlin-osm.pbf genommen habe, Wenn da jemand noch einen Tipp hätte :-)

Viele Grüße!

gislars commented 1 year ago

Hallo Metzor,

super das du es ausprobiert hast. Auf dem Server habe ich Metzingen eingespielt und es ist jetzt online:

Bei der Berechnung der Statistik-Tabelle gibt es offensichtlich noch ein Problem. Die Karte zeigt aber die Daten.

Zu deinem Problem bzw. der Fehlermeldung habe ich eine Vermutung und Erklärung. Da bei allen Tabellen auch Geometriespalten mit SRS epsg:25832 angelegt werden, kommt es zu obigem Fehler, wenn versucht wird Daten außerhalb dieses Streifens einzufügen.

Dir Ursache liegt darin, der Import und das Processing laufen parallel. Beim Import werden weltweite Änderungen eingefügt und später dann wird alles verworfen was nicht innerhalb der importieren Region liegt. In der Zwischenzeit kann aber das Processing-Script laufen und sich den Import schnappen, bevor die Filterung nach Importgebiet passiert ist. Das Problem habe ich noch nicht gelöst. Die Container bzw. Scripte müssen sich entweder "abstimmen" oder beim Import muss sofort auch gefiltert werden, bevor der Import zur Weiterverarbeitung freigeben wird.

Es gibt einen Workaround, etwas umständlich, so mache ich es gerade auf unserem Server: Ich starte immer nur einen der Container Import oder Processing, es laufen nie beide gleichzeitig. Den ganzen Tag lang läuft der Import, so habe ich stets aktuelle Daten im import-Schema. Abends stoppe ich den Import und starte das Processing. Wenn das fertig ist, stoppe ich den Processing-Container und starte den Import-Container wieder. Somit ist sichergestellt, dass die räumliche Filterung nach Importgebieten lief (geschieht im Import-Container), das sieht im Logfile so aus:

parking_import        | start spatial filtering
parking_import        | psql:/config/spatialfilter.sql:20: NOTICE:  spatial filtering on table: import.amenity_parking_points
parking_import        | psql:/config/spatialfilter.sql:20: NOTICE:  spatial filtering on table: import.traffic_calming_points
parking_import        | psql:/config/spatialfilter.sql:20: NOTICE:  spatial filtering on table: import.boundaries
parking_import        | psql:/config/spatialfilter.sql:20: NOTICE:  spatial filtering on table: import.ramps
parking_import        | psql:/config/spatialfilter.sql:20: NOTICE:  spatial filtering on table: import.highways
parking_import        | psql:/config/spatialfilter.sql:20: NOTICE:  spatial filtering on table: import.service
parking_import        | psql:/config/spatialfilter.sql:20: NOTICE:  spatial filtering on table: import.footways
parking_import        | psql:/config/spatialfilter.sql:20: NOTICE:  spatial filtering on table: import.parking_poly
parking_import        | psql:/config/spatialfilter.sql:20: NOTICE:  spatial filtering on table: import.obstacle_poly
parking_import        | psql:/config/spatialfilter.sql:20: NOTICE:  spatial filtering on table: import.obstacle_point
parking_import        | psql:/config/spatialfilter.sql:20: NOTICE:  spatial filtering on table: import.area_highway
parking_import        | psql:/config/spatialfilter.sql:20: NOTICE:  spatial filtering on table: import.crossings
parking_import        | psql:/config/spatialfilter.sql:20: NOTICE:  spatial filtering on table: import.pt_platform
parking_import        | psql:/config/spatialfilter.sql:20: NOTICE:  spatial filtering on table: import.pt_stops
parking_import        | DO
parking_import        | SELECT 13
parking_import        | DROP TABLE
parking_import        | SELECT 13
parking_import        | ALTER TABLE
parking_import        | CREATE INDEX
parking_import        | DROP TABLE

Anschließend den Import-Container stoppen und Processing-Container starten. Der Moment wann gestoppt wird ist wichtig.

Metzor commented 1 year ago

Hi gislars,

danke für die schnelle und ausführliche Antwort!

Mit deinen Tipps bin ich tatsächlich weiter gekommen :-) Was mich wundert: Bei mir erschien nie ein "psql:/config/spatialfilter.sql:20:" in den logs vom Import-Container.

Die einzige Referenz darauf, die ich gefunden habe, ist auskommentiert: https://github.com/osmberlin/osm-parking-processing/blob/2dc41f3a5a398de2a4110ef016f6aab22a63dcd0/parking_import/import_osm.sh#L85-L86

Ich habe das bei mir hinter dies hier eingefügt: https://github.com/osmberlin/osm-parking-processing/blob/2dc41f3a5a398de2a4110ef016f6aab22a63dcd0/parking_import/import_osm.sh#L167

Dann läuft die Prozessierung, soweit ich das verstehe, komplett bis zum Ende:

2023-09-02 09:59:21 processing region: metzingen 2023-09-02 09:59:21 processing table: parking_segments 2023-09-02 09:59:28 parking_segments done 2023-09-02 09:59:28 processing table: parking_spaces 2023-09-02 09:59:30 parking_spaces done 2023-09-02 09:59:30 processing table: parking_lanes 2023-09-02 09:59:32 parking_lanes done

Soll das hier so sein oder hatte ich oben an der falschen Stelle gefiltert?

2023-09-02 09:58:39 CREATE INDEX 2023-09-02 09:58:39 ALTER TABLE 2023-09-02 09:58:40 UPDATE 1360 2023-09-02 09:58:40 ALTER TABLE 2023-09-02 09:58:40 DROP INDEX 2023-09-02 09:58:40 psql:/config/process_osm.sql:71: NOTICE: index "highways_geom_idx" does not exist, skipping 2023-09-02 09:58:40 psql:/config/process_osm.sql:73: NOTICE: index "highways_geog_idx" does not exist, skipping 2023-09-02 09:58:40 psql:/config/process_osm.sql:85: NOTICE: index "highways_geog_buffer_idx" does not exist, skipping 2023-09-02 09:58:40 psql:/config/process_osm.sql:87: NOTICE: index "highways_geog_buffer_left_idx" does not exist, skipping 2023-09-02 09:58:40 psql:/config/process_osm.sql:89: NOTICE: index "highways_geog_buffer_right_idx" does not exist, skipping 2023-09-02 09:58:40 psql:/config/process_osm.sql:92: NOTICE: table "buffer_obstacle" does not exist, skipping 2023-09-02 09:58:40 psql:/config/process_osm.sql:125: NOTICE: index "boundaries_geom_idx" does not exist, skipping 2023-09-02 09:58:40 psql:/config/process_osm.sql:127: NOTICE: index "boundaries_geog_idx" does not exist, skipping 2023-09-02 09:58:41 psql:/config/process_osm.sql:134: NOTICE: index "parking_poly_geog_idx" does not exist, skipping 2023-09-02 09:58:41 psql:/config/process_osm.sql:139: NOTICE: index "buffer_area_highway_geog_idx" does not exist, skipping 2023-09-02 09:58:41 psql:/config/process_osm.sql:161: NOTICE: index "parking_poly_label_geom_idx" does not exist, skipping 2023-09-02 09:58:41 psql:/config/process_osm.sql:169: NOTICE: index "service_geom_idx" does not exist, skipping 2023-09-02 09:58:41 psql:/config/process_osm.sql:171: NOTICE: index "service_geog_idx" does not exist, skipping 2023-09-02 09:58:41 psql:/config/process_osm.sql:180: NOTICE: index "crossings_geog_buffer_idx" does not exist, skipping

Ich schau die Tage mal, ob in den Tabellen etwas sinnvolles drinsteht.

Dass es auf dem Server für Metzingen keine Statistik anzeigt, liegt wohl daran, dass für Metzingen noch keine Stadteile definiert sind. Mal schauen, ob da opendata-mäßig was von BW verfügbar ist...

Danke nochmals und viele Grüße Metzor

gislars commented 1 year ago

der auskommentierte spatialfilter ist gefixed. Wenn in den logs "done processing" auftaucht, dann ist das Script bis zum Ende durchgelaufen. Die NOTICEs sind sichtbar, da versucht wird mit "DROP INDEX IF EXISTS " ein Index zu löschen. Da der beim ersten Durchlauf noch nicht existiert, gibt es die NOTICE. Der gleiche Aufruf ohne "IF EXISTS" würde zu einem Fehler/ERROR führen und das Script würde abbrechen. Insofern ist alles ok, solange NOTICEs auftauchen.