2016-11-29 3 views
1

ContexteComment fusionner les fichiers osm en conservant toutes les informations de nœud, de chemin et de relation?

Je suis en train de faire un fichier vecteur de taille réduite de mbtiles pour le monde d'une solution de cartes hors-ligne compacte Je travaille sur pour le bureau Windows. Pour ce faire, j'ai trouvé que la taille réduite d'OsmAnd World_basemap_2.obf est exactement ce dont j'ai besoin, mais dans le format mbtiles osm, donc je peux générer un mbtiles. Le fichier obf a été créé à l'aide des fichiers osm suivants générés à partir de fichiers de formes. Ils sont disponibles à http://builder.osmand.net/basemap/

Le problème que j'ai est que pour faire un mbtiles dont ils ont besoin pour être combinés en un seul guide de osm2vectortiles de fichiers osm pour générer un mbtiles trouvé ici http://osm2vectortiles.org/docs/own-vector-tiles/.

Je les extrait d'abord pour traiter les fichiers osm.

Problème

Lorsque j'utilise osmconvert pour combiner les fichiers en utilisant les --complete-voies et drapeaux --complex-façons de beaucoup de relations et les moyens sont retirés et la taille du fichier est très différent.

Ex:

osmconvert proc_line_tertiary_out.osm --complete-voies --complex-voies -o = tertiary.o5m

-Résultats dans un fichier 133,691 kb

osmconvert tertiaire .o5m --complete-voies --complex-voies -o = tertiary.csv

-Résultats dans un csv avec un total de 13.131.405 noeuds, les voies et les relations

osmconvert tertiary.o5m proc_line_ferry_out.osm.o5m --complete-voies --complex noeuds -o = combined.o5m

fusion tertiary.o5m avec proc_line_ferr_out.osm.o5m (généré la même que celle indiquée ci-dessus) et convertit en csv

-résultats dans un csv avec total des noeuds, des voies et des relations ... ce qui est nettement moins et est très préoccupante. La combinaison de deux fichiers ne devrait pas faire moins de nœuds, de chemins et de relations que les fichiers originaux.

Question

Qu'est-ce que je fais mal?

Y at-il une autre façon de combiner des fichiers osm? (Osmose je l'ai lu ne peut pas traiter avec des noeuds négatifs)

Y at-il une autre façon de générer un mbtiles, peut-être à partir de plusieurs fichiers osm?

Fichiers essayant de combiner

points.osm.bz2

polygon_aeroway_military_tourism.osm.bz2

polygon_lake_water.osm.bz2

polygon_natural_landuse.osm.bz2

proc_line_admin_level_out.osm.bz2

proc_line_ferry_out.osm.bz2

proc_line_motorway_out.osm.bz2

proc_line_primary_out.osm.bz2

proc_line_railway_out.osm.bz2

proc_line_secondary_out.osm.bz2

proc_line_tertiary_out.osm.bz2

proc_line_trunk_out.osm.bz2

cities.osm.bz2

coastline.osm.bz2

OSMConvert

osmconvert explique queFusion de plusieurs zones géographiques Sous certaines conditions, les fichiers de données OSM peuvent être fusionnés. Si elles contiennent des objets (nœuds, chemins, relations) avec le même identifiant, ils doivent avoir le même contenu. Par exemple: Si un chemin traverse la frontière géographique entre deux fichiers régionaux, le jeu de données doit contenir chaque référence de nœud, même les références aux nœuds qui ne se trouvent pas dans les limites du fichier concerné. C'est-à-dire qu'une telle région ne doit pas avoir été découpée en utilisant l'option --drop-brokenrefs. Est-ce que cela signifie que je ne peux pas faire ce que j'essaie de faire? Je veux conserver tous les nœuds, chemins et relations même si les fichiers ne les ont pas en commun.

Tentative

osmconvert polygon_aeroway_military_tourism.osm polygon_natural_landuse.osm -o = result.osm

Résultat

<?xml version='1.0' encoding='UTF-8'?> 
<osm version="0.6" generator="osmconvert 0.7T"> 
    <node id="-10000000000001" lat="-1.0015443" lon="-80.5349586"/> 
    <way id="-100000001" version="1"> 
     <nd ref="-10000000000001"/> 
     <nd ref="-10000000000002"/> 
     <nd ref="-10000000000003"/> 
     <nd ref="-10000000000004"/> 
     <nd ref="-10000000000005"/> 
     <nd ref="-10000000000006"/> 
     <nd ref="-10000000000007"/> 
     <nd ref="-10000000000008"/> 
     <nd ref="-10000000000009"/> 
     <nd ref="-10000000000010"/> 
     <nd ref="-10000000000011"/> 
     <nd ref="-10000000000012"/> 
     <nd ref="-10000000000013"/> 
     <nd ref="-10000000000014"/> 
     <nd ref="-10000000000015"/> 
     <nd ref="-10000000000016"/> 
     <nd ref="-10000000000017"/> 
     <nd ref="-10000000000018"/> 
     <nd ref="-10000000000019"/> 
     <nd ref="-10000000000020"/> 
     <nd ref="-10000000000021"/> 
     <nd ref="-10000000000022"/> 
     <nd ref="-10000000000023"/> 
     <nd ref="-10000000000024"/> 
     <nd ref="-10000000000025"/> 
     <nd ref="-10000000000026"/> 
     <nd ref="-10000000000027"/> 
     <nd ref="-10000000000028"/> 
     <nd ref="-10000000000029"/> 
     <nd ref="-10000000000030"/> 
     <nd ref="-10000000000031"/> 
     <nd ref="-10000000000032"/> 
     <nd ref="-10000000000033"/> 
     <nd ref="-10000000000034"/> 
     <nd ref="-10000000000035"/> 
     <nd ref="-10000000000036"/> 
     <nd ref="-10000000000037"/> 
     <nd ref="-10000000000038"/> 
     <nd ref="-10000000000039"/> 
     <nd ref="-10000000000040"/> 
     <nd ref="-10000000000041"/> 
     <nd ref="-10000000000042"/> 
     <nd ref="-10000000000043"/> 
     <nd ref="-10000000000044"/> 
     <nd ref="-10000000000045"/> 
     <nd ref="-10000000000046"/> 
     <nd ref="-10000000000047"/> 
     <nd ref="-10000000000048"/> 
     <nd ref="-10000000000049"/> 
     <nd ref="-10000000000050"/> 
     <nd ref="-10000000000051"/> 
     <nd ref="-10000000000001"/> 
    </way> 
</osm> 

Répondre

2

les options --complètes et --complex-ways sont destinées à être utilisées lors de l'application de bordures. Si vous n'écrasez pas les données OSM (options -b ou -B), n'utilisez pas mieux --complet-voies ou --complètes sauf si vous êtes certain de ce qu'elles font de vos données. Au moins, je ne le suis pas.

La façon de choix de fusionner les données OSM en utilisant osmconvert est la suivante:

osmconvert input1.o5m input2.o5m input3.o5m -o=output.o5m 

Il y a quelques plus d'informations sur osmconvert dans OSM Wiki:

https://wiki.openstreetmap.org/wiki/Osmconvert

+0

Simple erreur, je ne peux pas croire que je l'ai négligé. Merci beaucoup. – longlostbro

+0

Y a-t-il d'autres limites que je devrais connaître? quand je combine polygon_aeroway_military_tourism.osm - 17340 nœuds/chemins/relations et polygon_natural_landuse.osm - 8711704 nœuds/chemins/relations le résultat combiné devient - 3 nœuds/chemins/relations – longlostbro

+0

J'ai ajouté plus d'information à ma question. Mon interprétation de osmconvert est qu'il ne peut pas garder tous les nœuds et relations lors de la fusion, seulement ceux en commun. – longlostbro

1

Il peut être plus facile pour votre cas d'utilisation de fusionner le déjà des carreaux vectoriels rendus (copie de carreaux PBF individuels) à partir de plusieurs extraits OSM2VectorTiles au format MBTiles - et fusionnez tous ces Fichier MBTiles ngle.

Vous pouvez utiliser patch utilitaire de package MBUtil: https://github.com/mapbox/mbutil/blob/master/patch

Ou l'outil de https://pypi.python.org/pypi/umimbutil

Ces deux utilitaires devraient fonctionner pour une fusion de base des zones distinctes où les tuiles individuelles ne doivent pas nécessairement être combinés ensemble . Alternativement - vous pouvez écrire un script de base qui supprime de la planète MBTiles toutes les tuiles dont vous n'avez pas besoin.MBTiles est juste un fichier SQLite, donc cela devrait être possible avec des commandes SQL de base ...

P.S. Dans le cas où quelqu'un doit fusionner raster (!!!) MBTiles y compris la combinaison des tuiles raster en tuiles PNG ou JPEG ensemble, ils ont besoin d'un utilitaire de fusion différent: https://www.maptiler.com/how-to/merge-mbtiles/ sur la ligne de commande merge_mbtiles disponible après avoir rempli le formulaire http://www.maptiler.com/demo/

+0

Merci, je ne savais pas vous pourriez fusionner des mbtiles. Maintenant, le seul problème serait qu'il faut des semaines pour générer un mbtiles à partir d'un fichier osm quand j'ai essayé. Pour ce qui est de supprimer les données des planet.mbtiles, j'ai essayé de le faire, mais avec un si grand nombre de transactions et le fait de passer l'aspirateur sur un si grand ensemble de données, cela a pris beaucoup de temps. – longlostbro