OpenStreetMap Forum

The Free Wiki World Map

You are not logged in.

#1 2018-10-14 09:30:14

michuup
Member
Registered: 2014-08-20
Posts: 10

ogr2ogr sortowanie danych

Witam,
jak eksportuje dane np linie przy pomocy ogr2ogr do formatu geojson to jest w nich kolumna o nazwie z_order i po niej sortuje malejąco, czy jest możliwość aby dało tak się zrobić z multipolygonami? W pliku osmconf.ini przy warstwie lini jest zawarta taka notka

#computed_attributes must appear before the keywords _type and _sql
computed_attributes=z_order
z_order_type=Integer
# Formula based on https://github.com/openstreetmap/osm2pgsql/blob/master/style.lua#L13
# [foo] is substituted by value of tag foo. When substitution is not wished, the [ character can be escaped with \[ in literals
z_order_sql="SELECT (CASE [highway] WHEN 'minor' THEN 3 WHEN 'road' THEN 3 WHEN 'unclassified' THEN 3 WHEN 'residential' THEN 3 WHEN 'tertiary_link' THEN 4 WHEN 'tertiary' THEN 4 WHEN 'secondary_link' THEN 6 WHEN 'secondary' THEN 6 WHEN 'primary_link' THEN 7 WHEN 'primary' THEN 7 WHEN 'trunk_link' THEN 8 WHEN 'trunk' THEN 8 WHEN 'motorway_link' THEN 9 WHEN 'motorway' THEN 9 ELSE 0 END) + (CASE WHEN [bridge] IN ('yes', 'true', '1') THEN 10 ELSE 0 END) + (CASE WHEN [tunnel] IN ('yes', 'true', '1') THEN -10 ELSE 0 END) + (CASE WHEN [railway] IS NOT NULL THEN 5 ELSE 0 END) + (CASE WHEN [layer] IS NOT NULL THEN 10 * CAST([layer] AS INTEGER) ELSE 0 END)"

czy tylko linie mogą posiadać tą wartość? Widziałem jeszcze kiedyś że pliki z kiedyś działającej strony eksportowane do geojson miały w polygonach kolumne sort_rank i chyba po nich też można było sortować

sort_rank: a suggestion for which order to draw features. The value is an integer where smaller numbers suggest that features should be “behind” features with larger numbers.

Offline

#2 2018-10-15 01:03:55

RicoElectrico
Member
From: Trójmiasto
Registered: 2012-07-01
Posts: 1,171

Re: ogr2ogr sortowanie danych

Jeśli dobrze rozumiem jak to działa, to tak, ogr2ogr generuje z_order dla linii. Tam są tagi typowe dla lini

Ten sort_rank po wyszukaniu w Google odnosi do dokumentacji Tilezen. https://github.com/tilezen/vector-datas … /layers.md

Tu dokumentacja: https://github.com/tilezen/vector-datas … /sort_rank

Dla porównania w przypadku domyślnego stylu mapy, który widać na osm.org multipolygony są sortowane po way_area. Dzięki temu mniejsze wskakują nad większe.

Offline

#3 2018-10-15 10:18:42

michuup
Member
Registered: 2014-08-20
Posts: 10

Re: ogr2ogr sortowanie danych

dzięki za odpowiedź, dokładnie chodzi mi o to aby mniejsze polygony pokazywały się nad większymi, próbowałem w ogr2ogr dodać w pliku osmconf ten tag way_area w (attributes=) ale nie pojawia się po wygenerowaniu pliku w geojson, spróbowałem jeszcze sortować po osm_way_id bo taki tag mi generuje automatycznie w geojson ale np budynki chowają mi się pod większymi obszarami zieleni więc po tym tagu nie posortuje mi raczej dokładnie. Czy jest mozliwość aby otrzymać ten tag w ogr2ogr? Czy bym musiał zrobić coś na wzór tak jak z liniami, czyli umieścić ten tag w computed_attributes? Czy zostaje mi tylko osm2pgsql żeby ten tag utworzyć?

[multipolygons]
# common attributes
# note: for multipolygons, osm_id=yes instantiates a osm_id field for the id of relations
# and a osm_way_id field for the id of closed ways. Both fields are exclusively set.
osm_id=yes
osm_version=no
osm_timestamp=no
osm_uid=no
osm_user=no
osm_changeset=no

# keys to report as OGR fields
attributes=name,name:en,name:pl,type,aeroway,amenity,admin_level,barrier,boundary,building,craft,geological,historic,land_area,landuse,leisure,man_made,military,natural,office,place,shop,sport,tourism,waterway,religion
# keys that should NOT be reported in the "other_tags" field
ignore=area,created_by,converted_by,source,time,ele,note,openGeoDB:,fixme,FIXME
# uncomment to avoid creation of "other_tags" field
other_tags=no
# uncomment to create "all_tags" field. "all_tags" and "other_tags" are exclusive
all_tags=no

Last edited by michuup (2018-10-15 10:27:53)

Offline

#4 2018-10-15 11:27:55

RicoElectrico
Member
From: Trójmiasto
Registered: 2012-07-01
Posts: 1,171

Re: ogr2ogr sortowanie danych

W jakim programie używasz danych OSM? To mogłoby ułatwić pomoc.
Poza tym łatwiej Ci będzie jeśli rozdzielisz wszystko na osobne warstwy: budynki, woda, landuse, itp. Wtedy i bez sortowania ładnie powinno wyjść.

A jeśli chodzi o osm_id, to tylko identyfikator. Nie jest konieczny do konsumpcji danych, nie wnosi żadnej informacji poza... byciem unikatowym identyfikatorem.

Last edited by RicoElectrico (2018-10-15 11:30:29)

Offline

#5 2018-10-16 00:25:13

kocio
Administrator
From: Warszawa
Registered: 2013-09-04
Posts: 3,233
Website

Re: ogr2ogr sortowanie danych

Nawet osm_id się czasem przydaje - w OSM Carto jest stosowany m.in. po to, żeby położenie nazwy miejscowości nie zmieniało się jeśli nazwa przekracza granice (meta)kafelków:

https://github.com/gravitystorm/openstr … .mml#L1309

Offline

#6 2018-12-08 15:12:35

michuup
Member
Registered: 2014-08-20
Posts: 10

Re: ogr2ogr sortowanie danych

Mam jeszcze jedno pytanie dotyczące sortowania, mianowicie w ubuntu w terminalu gdy chce sortować linie komenda:

ogr2ogr -f GeoJSON placelinessort.geojson placelines.geojson -sql "select * from lines ORDER BY z_order DESC

to wyskakuje mi znak ">" natomiast na systemie windows jest wszystko ok, czemu tak się dzieje? coś źle wpisuje?

dzięki za pomoc

Offline

#7 2018-12-08 16:06:00

rmikke
Moderator
From: Warszawa
Registered: 2014-11-14
Posts: 1,598
Website

Offline

Board footer

Powered by FluxBB