Questão
Como faço para converter um arquivo SVG para o formato GeoJSON?
Resultado desejado:
Eu quero fazer um mapa choropleth usando algo como D3.js, ou qualquer outra biblioteca existente.
Desafio:
Eu tenho um arquivo SVG que pude obter do domínio público das regiões administrativas de uma província em particular de um país em particular. Acredito que preciso convertê-lo em GeoJSON antes de poder usá-lo nas bibliotecas que conheço.
Respostas:
Acabei de escrever uma biblioteca que converte uma imagem SVG em um GeoJSON (ligeiramente incorreto).
svg2geojson
Ele exige que você edite manualmente seu SVG para adicionar duas tags XML que associam um local SVG a um lat / long e fornece uma ferramenta de linha de comando para converter o arquivo. Se preferir, ele pega todos os grupos de nível superior (como o Illustrator exporta suas camadas) e os exporta como arquivos separados.
Uso
Limitações
Usa uma técnica de un-projeção ingênua / incorreta que pressupõe que uma região retangular da imagem corresponda a uma região retangular lat / long. Por exemplo, em um retângulo de cerca de 1 milha de largura por meia milha de altura perto de São Francisco, a borda inferior é cerca de 10 cm mais longa que a borda superior. Este foi perto o suficiente para as minhas necessidades.
Atualmente, não suporta SVG que usa caminhos com comandos quadráticos de Bézier ou arco elíptico. (Estou trabalhando para adicioná-los.)
fonte
<p5:GeoItem Longitude="22.1471203091967" Latitude="44.2498454806746" X="0" Y="1" />
Como esses 4 geocoordenados são traduzidos para esse conjunto de dados de 8 itens?Existe uma ferramenta de linha de comando da Phrogz mencionada abaixo que eu não fiz check-out:
/gis//a/245085/35596
Para quem vem aqui, a resposta é: "é bastante difícil (pelo menos para um programador experiente, mas cartógrafo inexperiente)". Requer uma compreensão mais do que superficial de como os Sistemas de Referência Espacial (SRS) funcionam. Você precisa mais ou menos codificar geograficamente seu .SVG usando algo como QGIS. Como isso é feito? Ainda não há pista. Mas a resposta é:
"Você não pode simplesmente converter SVG para GeoJSON, pois o SVG está sem as referências geográficas fundamentais."
Se você deseja continuar, comece a pesquisar sobre como georreferenciar um arquivo DXF.
Como calcular parâmetros para a transformação Affine do QGIS?
A resposta de Germán Carrillo é muito útil.
fonte
A ferramenta de linha de comando ogr2ogr deve ser capaz de fazer isso. Algo como:
Ambos os formatos são suportados http://www.gdal.org/ogr_formats.html . Se você não estiver familiarizado com ogr2ogr, a maneira mais fácil de fazer o download e instalar é provavelmente através de https://trac.osgeo.org/osgeo4w/ .
fonte
Você não precisa converter de SVG para GeoJSON para usar a imagem de um choropleth no d3, embora isso possa ser necessário para outras bibliotecas.
As informações do caminho no arquivo SVG (deve haver pelo menos um caminho para cada estado / país / estado / subdivisão no seu mapa) são suficientes para mapear dados para sua imagem SVG em d3.
Deixe-me colocar de outra maneira: se você pode fazer um d3.select no seu svg original que retornará apenas um caminho por estado / país / região, então você pode usar o d3 para criar um coro. Geralmente é o caso quando você tem um mapa no SVG. Na verdade, é mais simples do que usar um arquivo GeoJSON, pois você não precisa se preocupar com a localização do espaço, projeção etc. Você pode até querer ajustar o SVG original para adicionar informações ausentes (como nomes de estado, que você pode adicionar como IDs de DOM ou Classes) antes de usá-lo com D3, mas isso geralmente não é necessário.
Por outro lado, como foi dito antes, os SVG têm apenas informações de caminho / linhas, não geográficas / espaciais, portanto, se você deseja converter de SVG para GeoJSON, precisa adicionar / mapear informações de localização geográfica à sua imagem SVG. Por exemplo, você pode converter primeiro de svg para JSON, depois calcular / adicionar informações de localização geográfica (isso dependerá da região que você está mapeando) e gerar um GeoJSON a partir disso. Até onde eu sei, não existe uma ferramenta pronta para fazer esse trabalho para você.
fonte
Eu tentaria fonte o formato shapefile em vez de SVG para a província que você está procurando. Como os dados são de domínio público, as chances são boas, você pode encontrá-lo. Tente http://www.naturalearthdata.com/ ou faça uma pergunta aqui. Em seguida, converta de Shapefile para GeoJSON ou TopoJSON; MapShaper é seu amigo. A partir deste ponto, o D3 deve estar ao seu alcance (excelente tutorial Vamos criar um mapa )
fonte