Qual é o comportamento pretendido de -skipfailures no ogr2ogr?

9

Estou tentando executar ogr2ogr para converter alguns geojson em shapefile. Tudo fica bom até que qualquer um dos recursos geojson tenha uma geometria inválida (por exemplo, a matriz de coordenadas da geometria de pontos está vazia).

Eu incluí o sinalizador -skipfailures, mas ogr2ogr fecha assim que atinge o primeiro recurso inválido. Não estou fazendo algo errado aqui?

Exemplo de chamada ogr2ogr:

ogr2ogr -skipfailures -f "ESRI Shapefile" myshape.shp mygeojson.geojson
user890
fonte

Respostas:

4

Tente adicionar -nlt geometryao seu script ogr:

ogr2ogr -skipfailures -f "ESRI Shapefile" myshape.shp mygeojson.geojson -nlt geometry

Eu experimentei o problema que você descreve usando o ogr2ogr para converter conjuntos de dados contendo recursos de peça única e peça múltipla na mesma camada; por exemplo, PONTO e MULTIPOINT, LINHA E MULTILINE e POLYGON e MULTIPOLYGON.

Por padrão, o OGR deseja que você obedeça à convenção e use apenas um tipo de recurso por conjunto de dados. Se você infringir a regra, o OGR lançará um erro genérico e recomendará o -skipfailuressinalizador. Isso pode ser enganoso se o problema real forem geometrias mistas / correspondentes na mesma camada.

Como o shapefile da ESRI permite recursos únicos / multipartes na mesma camada, é necessário perceber que o OGR pode gerar esse erro mesmo se você tiver geometrias válidas. Nesse cenário, você tem duas opções: 1) Converter recursos de várias partes em partes únicas (o que ogr pode fazer por meio do -explodecollectionssinalizador) ou 2) usar o -nltsinalizador e especificar GEOMETRYcomo opção. A -nlt GEOMETRYopção permite combinar uma mistura de tipos de recursos na mesma camada. Obviamente, como conseqüência, o OGR não protegerá as melhores práticas.

Se o seu arquivo GeoJSON "iniciou a vida" como um arquivo de forma ESRI, é possível que você tenha os recursos POINT e MULTIPOINT contidos nesse conjunto de dados; nesse caso, você pode encontrar esse problema mesmo com pontos válidos.

elrobis
fonte
2
 -skipfailures: Continue after a failure, skipping the failed feature.

Uma explicação para o comportamento que você está enfrentando pode ser que todos os recursos do seu arquivo geoJSON estão com problemas. Você testou sua validade, por exemplo, usando o QGIS "Verificar validade da geometria"?

underdark
fonte
Todos os outros recursos são válidos. Se eu corrigir a geometria de um ponto descrita em minha postagem original, todos os outros pontos geojson serão adicionados ao shapefile de saída.
user890
1

O comportamento pretendido, no meu entendimento, é que, se um recurso inválido for encontrado, ele será ignorado e a conversão continuará com o próximo recurso válido, em vez de parar.

Parece que você está fazendo tudo corretamente, então eu não sei o que há de errado! Você já tentou ir para um formato diferente apenas para ver se isso funciona?

Darren Cope
fonte