Capitais dos estados

Estou com um banco de dados local e fiz uma consulta usando a tag

key:capital = 4

na tabela de pontos.

Segundo a wiki (http://wiki.openstreetmap.org/wiki/Key:capital) eu deveria obter as capitais dos estados (admin_level = 4), mas não recebi as capitais dos estados brasileiros.

Consegui a capital do Brasil ( Brasilia ) com

capital='yes'

.

Como está o mapeamento das capitais estaduais?

“capital=número” e “admin_level=número” em locais são gambiarras para renderizador e/ou quebra-galhos para alguma limitação (ou para facilitar a preguiça mesmo).
Pessoalmente acho errado.

Essa informação já existe no OSM, sem necessidade de tags adicionais portanto.
Já temos as relações de estados (admin_level=4); as capitais são os nós que possuem o role de “admin_centre”

Logo, http://overpass-turbo.eu/s/qRD te dá todas as capitais dos estados do Brasil.

Pois é.
Mas essa informação está na documentação oficial, então algo deve estar errado.

Especial atenção para:
http://wiki.openstreetmap.org/wiki/Talk:Proposed_features/capital

Eu não sei como encontrar roles na pós-importação dos dados.

Acompanhei estes textos:

https://github.com/gravitystorm/openstreetmap-carto/issues/2365
https://dba.stackexchange.com/questions/104943/osm2pgsql-select-relation-member-by-role

… logo, eu não posso buscar roles no banco de dados. Existe outra alternativa?

Grande parte da discussão em https://wiki.openstreetmap.org/wiki/Talk:Proposed_features/capital é da época que existia pouco suporte às relações.

Talvez tentar algo na linha de https://dba.stackexchange.com/questions/104943/osm2pgsql-select-relation-member-by-role ?
Ou outro aplicativo para importar os dados?

http://wiki.openstreetmap.org/wiki/Osmosis
http://wiki.openstreetmap.org/wiki/Osm2postgresql
http://wiki.openstreetmap.org/wiki/OSM2PostGIS
http://wiki.openstreetmap.org/wiki/Imposm

Só complementando, em https://dba.stackexchange.com/questions/104943/osm2pgsql-select-relation-member-by-role o autor da dúvida disse que funcionou com a resposta.

E precisa ver exatamente o que você pretende com o banco.
O osm2pgsql perde algumas informações.

Dá uma lida em http://wiki.openstreetmap.org/wiki/Databases_and_data_access_APIs#Database_Schemas

O osm2pgsql se fundamenta no default.style, que contém as tags que se deseja que virem colunas nas tabelas.
A perda de dados se dá somente quando não se prepara o default.style corretamente ( no caso dos elementos náuticos, por exemplo, a tag “seamark:*” não existe no default.style, sendo necessário incluí-la caso deseje algo como http://www.openseamap.org/index.php?id=openseamap&no_cache=1.

Eu tenho uma importação completa do OSM em um banco local (para fins militares) e preciso das capitais estaduais e federais. Segundo a documentação, Brasília deveria ser capital=‘yes’, pois é uma capital federal e as cidades que são capitais estaduais deveriam ser marcadas com capital=4 ( que é o admin_level de um estado ).

Eu não sei como decompor a role “admin_centre” segundo o site http://wiki.openstreetmap.org/wiki/Key:capital:

quanto ao seu complemento, após alguns testes me parece que a consulta

	SELECT osm_id, name,place,population, tags->'name:en' as name_en, tags->'name:pt' as name_pt, way
	FROM planet_osm_point
	JOIN (
	    SELECT ltrim(member, 'n')::bigint AS osm_id
	    FROM (
		SELECT unnest(members) AS member
		FROM planet_osm_rels
		WHERE ARRAY['boundary','administrative']<@tags AND ARRAY['admin_level','4']<@tags) u
	    WHERE member LIKE 'n%') x
	USING(osm_id)

está dando algum resultado. Estou avaliando ainda…

Bem… analisando o próprio OSM eu pude constatar que…

É uma relação composta pelos polígonos da cidade do Rio e um ponto bem em cima do nome da cidade, provavelmente o ponto que deveria marcar a capital do estado. Não entendo porque este ponto não está indo para a tabela de pontos…

Está errado isso.
Essa relação é da cidade http://www.openstreetmap.org/relation/2697338 e não do estado http://www.openstreetmap.org/relation/57963

Ela não deveria ter “capital=4”

Se a dificuldade é achar role, tenta usar outro schema, como o pgsnapshot.
Nele existe role (como pode ser visto em https://gis.stackexchange.com/questions/151729/geometry-from-relations-osm por exemplo)

Então chapa… é justamente isso.

  • O “admin_level” é 8 porque é uma cidade.

  • Possui a tag “capital” porque é capital de algo.

  • A tag “capital” tem valor 4 porque é capital de um estado ( estado : admin_level=4 )

  • Se fosse capital federal, seria “capital=yes”

Está certo (segundo a lógica da wiki http://wiki.openstreetmap.org/wiki/Key:capital, que normalmente é o que guia a criação de tags no OSM).

Percebi que ainda existe uma grande discussão sobre isso e não vi consenso na comunidade. Em vários lugares aqui usamos “state_capital=yes”, mas nem todos (São Paulo não diz nada de nada). Aparentemente os americanos também usam (https://taginfo.openstreetmap.org/keys/state_capital#map).

Mas a comunidade aconselha o uso da tag “capital”.
Eles concluíram que o uso de tags com valores “yes/no” se tornaria um pesadelo porque existem vários tipos de capitais.
Suponha que no futuro o governo crie capitais para as regiões do Brasil:

São Paulo seria capital do Sudeste, Bahia seria capital do Nordeste, Santa Catarina seria capital do Sul, etc …

Nesse caso, nossas regiões possuem admin_level=3 (corrija-me se estiver errado).

A cidade de São Paulo teria “capital=4” porque é capital de algo com “admin_level=4” (o estado de São Paulo) e o estado de São Paulo teria “capital=3” porque é capital de algo com “admin_level=3” (a região sudeste).

O mesmo para os outros estados…

Isso facilita as coisas porque cria uma relação de importância objeto/container (cidade/estado) e (estado/região).

Segundo essa lógica, Brasília poderia ter “capital=2” porque é capital de algo com admin_level=2 (Brasil), mas simplesmente colocaram “capital=yes” porque fica implícito que é capital federal.

Se fosse usar a lógica da tag “state_capital”, teríamos que criar tags para todos os tipos de capitais (coutry_capital, state_capital, region_capital, province_capital, planet_capital, e etc … ) isso seria uma zorra total.

Para nós brasileiros esta divisão é meio intuitiva porque somos bem organizados em matéria de cidade/estado/região/país mas existem países que isso é meio bagunçado e uma capital pode não ser necessariamente uma cidade.

O “capital=4” na relação, da forma que estava, não ia te ajudar (teria o mesmo problema de ter que encontrar role em membro de relação)
Caso fosse usada, deveria ser no nó do local (não na relação).

Quanto à wiki, tem alguns poréns que precisa tomar um pouco de cuidado ou pensar um pouco antes de utilizar: é um local que qualquer um pode editar, muitas vezes sem discussão (ou apenas exibindo o ponto de vista que alguém acha que é o certo).

Alguém pensa em alguma solução/valor qualquer e começa a utilizar. Em algum tempo existe uma quantidade significativa daquele valor.
Pessoas novas, ao procurar como representar algo, acabam encontrando aquele valor com bastante uso, e também passam a utilizar.
Outra pessoa vê que existe muito uso e cria uma página na wiki, dizendo que aquela é a forma de se mapear.
Isso é comum de acontecer, sem ter discussão se é de fato a melhor solução ou não.

Há páginas com informações que eram relevantes em uma época anterior, e que hoje já não fazem muito sentido (como a chave “is_in” https://wiki.openstreetmap.org/wiki/Key:is_in))

Ou valores e páginas que tentam contornar algum tipo de limitação dos aplicativos (como o caso de utilizar “capital=num” nos nós).

O OSM é um banco de dados; em geral não faz sentido ter duplicação ou redundância de informação.
É possível obter as capitais de estados com os dados que já existem no OSM, bastando apenas processar as relações.
Utilizar uma chave nos nós para explicitamente definir que são capitais é contornar uma limitação de algum caso específico, inserindo redundância no banco.

Mas de toda forma, se quiser discutir o que é certo ou errado nessa questão de valor, o melhor local seria a lista tagging https://lists.openstreetmap.org/listinfo/tagging

Eu vou avaliar as duas formas que discutimos aqui:

  1. Aquela consulta da role, que parece promissora.

  2. O uso de “state_capital=yes”, que me parece estar bastante difundido por aqui, mas que não conta com o respaldo da comunidade (acho que é um desses casos de que você falou).

No fundo eu não queria incentivar o uso do “state_capital” porque no resto do mundo ninguém usa e meu código vai correr o risco de quebrar no futuro.

Comparando o uso de “state_capital”…

… com o “capital=*”

Percebe-se que o Brasil é bem relutante em usar “capital=num”.

De qualquer forma, obrigado pela discussão. Achei bem produtiva.

Abraço.

Eu não sei qual é exatamente o tipo de uso que você quer dar para os dados, mas se não der resultado com alguma consulta com o schema do osm2pgsql, eu daria uma olhada no pgsnapshot (que aparenta ter um viés melhor para análises).

Não sei se você usa telegram também, mas dependendo do assunto às vezes a conversa flui melhor (e mais rápida) por lá
Caso tenha interesse https://wiki.openstreetmap.org/wiki/List_of_OSM_centric_Telegram_accounts

Também acaba tendo mais gente que participa.

Questões desse tipo podem ser discutidas no canal de suporte ou ou de discussões avançadas.

Ok. Vou dar uma olhada.

Como eu disse, trabalho desenvolvendo sistemas GIS para o Ministério da Defesa (http://www.cmabreu.com.br).

Tenho um banco de dados OSM do mundo e um geoserver para replicar o OSM em modo local, pois numa guerra quem sabe o que vai ficar online, não é verdade?

http://geodata.cmabreu.com.br/2016/08/02/criando-um-servidor-de-mapas/

Agora estou fazendo alguns refinamentos e criando mais algumas camadas e estilos para ficar mais redondo.

Estou relutante em baixar um shape com capitais …