Dizemos ao prefeito para onde ir (usando o Open Street Map)

Você não acha que nossos funcionários estão um pouco divorciados da realidade? O que não basta olhar para o território controlado exclusivamente a partir da janela do escritório no centro da cidade? Seria bom para o prefeito da cidade passear pessoalmente pela cidade de vez em quando, se comunicar com as pessoas e responder a perguntas no modo ao vivo?


Bem, o conhecido blogueiro Ilya Varlamov também pensou assim, então ele lançou o projeto mais legal com o nome desafiador BDSM, e especificamente "Big Road With the Mayor" ( link para o anúncio):


Pare de andar sozinho nas cidades russas - é hora de convidar prefeitos, governadores e gerentes da cidade.

As regras são simples.

O computador seleciona aleatoriamente dois endereços na sua cidade. Depois disso, passeamos de um endereço para outro. Uma condição: você não pode usar o carro. Apenas pernas, uma bicicleta, transporte público, uma scooter, uma equipe de cães. Sem preparação, sem aprovações de rota. Às vezes, os passeios serão longos, por toda a cidade, às vezes você terá que percorrer apenas alguns quarteirões no centro. Esta é a principal condição: sem janelas, sem preparação.

Durante a caminhada, nós, juntamente com o chefe da cidade, estudamos a infraestrutura, nos comunicamos com os moradores. O funcionário terá uma oportunidade única de contar a toda a Rússia sobre sua cidade, explicar os meandros da governança urbana, tornar-se mais próximo do povo!


Quadro do primeiro vídeo do projeto, com a participação do meu serviço na escolha de pontos aleatórios


O que Habr tem a ver com isso, você pergunta? E o problema está na frase sobre a escolha aleatória do endereço do começo e do fim da rota. Esta não é uma tarefa tão simples se você não quiser acabar na natureza de uma zona industrial ou se perder entre as intermináveis ​​cercas do setor privado. Basta tocar no cartão de venda não funciona aqui!


Sobre como eu resolvi esse problema e que descobertas de cidades como Ivanovo ou Kirov me apresentaram - sob o corte.


Aconteceu que eu já tinha a experiência necessária com mapas e navegação, graças ao meu serviço na construção de rotas turísticas. Foi através de um artigo sobre ele no hub que eles me encontraram e propuseram desenvolver um sistema que seleciona os pontos de partida e de chegada da rota em um mapa da cidade.


Idéia


De acordo com a idéia da equipe de Varlamov, deveria ter se parecido com isto: marcadores dos pontos de partida e de chegada saltam para frente e para trás no mapa da cidade, demonstrando claramente a aleatoriedade do processo. O próprio prefeito, a qualquer momento, aperta o botão e interrompe a busca. Depois disso, eles escolhem uma rota (é uma pena que, à mão, meu serviço de rotas para pedestres possa lhes oferecer algo interessante) e passear pela cidade.


Inicialmente, os requisitos para pontos eram os seguintes:


  1. A distância entre os pontos não é inferior a 3 quilômetros
  2. Os pontos não estão na zona industrial nem no setor privado
  3. Os pontos devem estar localizados em diferentes partes da cidade, para que a rota entre eles passe pelo centro

Então, durante o desenvolvimento, outro requisito foi adicionado: o serviço deve poder interagir com o Big Red Button do hardware, como este:



O botão simplesmente envia um sinal de clique para o computador conectado


Toda a dificuldade era como compor essa rota de maneira a evitar a natureza selvagem, por um lado, e por outro lado, cobrir com possíveis pontos todos os bairros da cidade, e não apenas alguns bairros "decentes" no centro. Ao mesmo tempo, inicialmente eu tinha um certo conjunto de estereótipos na cabeça que eram uma consequência do fato de eu morar em São Petersburgo, além disso, de cidades russas mais ou menos grandes, havia apenas alguns milhões de cidades como Moscou e Kazan. Mas o projeto concentrou-se principalmente em cidades com uma população de 200 a 500 mil pessoas (aparentemente os prefeitos das grandes cidades estão ocupados demais para andar pelas ruas). Em geral, mais uma vez recebi a confirmação da tese de que "Moscou não é a Rússia". Todas as considerações abaixo estão incorretas:


1) Prédios no centro e zonas industriais e casas particulares nos arredores.
2) Pelo menos há uma divisão em quartos - em um quarto há apenas arranha-céus, no outro - apenas casas particulares. Bem, quem construirá Khrushchev entre as cabanas de madeira?
3) O território da cidade é um polígono simples no mapa, dentro do qual estão todos os edifícios
4) Ok, pode haver buracos no aterro, mas pelo menos um
5) Bem, não uma, mas pelo menos não mais do que duas peças não relacionadas
6) As cidades nos dados OSM são marcadas com as marcas de uso de terra apropriadas e a escolha de áreas residenciais será fácil


Em geral, eu tive que andar em um ancinho.


Algoritmo de seleção de pontos


Primeiro, tive que decidir como exatamente os pontos inicial e final seriam escolhidos. Rejeitei a idéia de lançar um ponto aleatoriamente em coordenadas arbitrárias dentro dos limites da cidade quase que imediatamente. A maior parte da cidade no mapa é composta por todo tipo de territórios intransitáveis: polígonos de casas, rios, territórios simplesmente não marcados nos quais não está claro o que está localizado. Um ponto honestamente aleatório geralmente cai neles, ou você terá que trocá-lo (o que afetará fortemente a aleatoriedade) ou transferi-lo até chegar a um local adequado (e isso afetará a velocidade do trabalho).


Como a caminhada não precisa de um ponto arbitrário, mas que possa ser alcançado a pé, decidi fazer pontos apenas pelas estradas. Como resultado, meu algoritmo pega todas as estradas OSM (Caminho com uma etiqueta de estrada e valores correspondentes a estradas e calçadas de pedestres), quebra arestas muito longas adicionando pontos intermediários (para que os pontos vizinhos em uma borda não fiquem a mais de cem metros um do outro ) e remove pontos muito próximos um do outro (a menos de 50 metros), por exemplo, em várias estradas paralelas.



Pontos marcados para Yaroslavl, quartos de casas particulares e zona industrial ao longo da ferrovia são cortados


O resultado é uma grade mais ou menos uniforme, cobrindo toda a cidade. Além disso, ao solicitar o próximo ponto, não é mais necessário reverter e fazer cálculos geométricos pesados ​​muitas vezes, basta escolher um par aleatório adequado a partir de um conjunto de pontos pré-calculado.


Como escolhê-los? Temos dois requisitos para isso: a não menos de três quilômetros um do outro e em diferentes partes da cidade, para que a rota passe pelo centro. Se a primeira condição é simples de cumprir, então, na segunda, eu precisava determinar o centro real. Você não extrairá essas informações dos mapas (o centro geométrico da cidade não é um fato que seja seu centro histórico).


Para fazer isso, decidi seguir o caminho simples e simplesmente marcar o centro da cidade manualmente. Adicionado carregamento de polígono ao GeoJSON, que editei usando o conveniente site geojson.io (seriamente, se você precisar trabalhar com geometria 2D simples em seu projeto, o geojson.io permitirá que você faça tudo muito rapidamente e não se preocupe em criar seus próprios editores ou com usando todos os tipos de aplicativos GIS pesados).



Kirov marcado, com um centro marcado (amarelo), áreas excluídas manualmente (vermelho) e uma fatia adicionada (verde)


Assim, a primeira versão do algoritmo ficou pronta em dois dias e o tempo de teste começou. E aqui as armadilhas subiram.


Setor privado


De acordo com as condições da tarefa, a rota não deveria começar e terminar no setor privado. Pela minha ingenuidade, um morador de uma cidade grande nunca poderia pensar que casas particulares de madeira poderiam estar em uma rua vizinha da praça central da cidade. E não alguns monumentos antigos como o nosso, mas naturalmente blocos inteiros.


A luta contra esses bairros ocupava a maior parte do tempo. No começo, tentei me dar bem com dados puros do OSM. Existe um significado especial para a etiqueta residencial = rural para áreas rurais e lotes = uso da terra para todos os tipos de jardinagem.



Sim, mesmo em São Petersburgo, há jardinagem embutida na cidade


No entanto, rapidamente ficou claro que essas tags são colocadas muito raramente e geralmente são satisfeitas apenas com o uso da terra mais comum = residencial (área residencial).


O próximo passo foi uma tentativa de eliminar manualmente esses bairros. No arquivo geojson no centro da cidade, adicionei suporte para excluir áreas manualmente. Infelizmente, rapidamente ficou claro que muitas iterações do ciclo "baixaram o mapa - olharam para ele - encontraram o setor privado - cortaram em geojson.io - baixaram novamente" levam muito tempo, especialmente em cidades onde casas particulares são misturadas com vários andares e espalhadas em pequenos grupos. e aqui Por exemplo, em Ivanovo



Prédios particulares e de apartamentos são densamente misturados entre si a apenas alguns quarteirões do centro


Eu tive que inventar um algoritmo empírico. Peguei um quarto (landuse = região residencial, embora não exista um requisito direto para seu uso, geralmente não é marcado por toda a cidade ou região, mas por bairros separados), peguei todos os edifícios dentro dele (polígonos com a etiqueta de construção) e calculei a área média desse polígono. Se tivesse menos de 400m2 (o valor foi retirado do teto, com a condição de marcações e cálculos rudes e casas longas individuais encontradas em tais blocos), o bloco foi considerado um setor privado e foi jogado fora dos cálculos.


Como resultado, a combinação desses três métodos tornou possível filtrar de maneira mais ou menos eficiente as áreas indesejáveis, embora não sem a participação do trabalho manual.


Mas é claro que exceções foram encontradas mais tarde. Por exemplo, Yevpatoriya, onde, em geral, todo o centro histórico é essencialmente as ruas estreitas do setor privado. Se você jogar tudo fora - não restará nada da cidade.



Paisagem típica de Evpatoria a algumas centenas de metros do mar


Especialmente nesses casos, era necessário adicionar não apenas setores da cidade excluídos manualmente ao GeoJSON, mas também setores adicionados manualmente. I.e. mesmo que o trimestre não se enquadrasse em outras condições, ele ainda estava incluído na lista de pontos disponíveis para pesquisa.


Áreas industriais e locais comerciais


Nas zonas industriais, tudo é muito mais simples do que no setor privado. Como regra, eles já estão marcados com a tag landuse = industrial e não há problemas com eles. A menos que haja algumas exceções quando nem todos os blocos estão marcados, mas os edifícios separados. Mas como eu usei o código pronto para trabalhar com mapas do Sight Safari no projeto, isso já foi levado em consideração lá.


Landuse = varejo teve que mexer com sites comerciais manualmente. Como na metade dos casos, grandes mercados ou shopping centers são marcados dessa maneira, e no segundo semestre, os armazéns atacadistas estão localizados em algum lugar nos arredores ou em terminais de carga em geral, onde a entrada é proibida para estrangeiros. A padronização, como de costume, é esfarrapada. Felizmente, existem algumas dessas zonas, essa tag não é muito popular e, portanto, não foi difícil lidar com elas manualmente.


Ao mesmo tempo, ele adicionou à sua lista de topônimos engraçados que são freqüentemente encontrados em zonas industriais. Por exemplo, em Yaroslavl, há Brake Street. Se eu morasse lá, eu definitivamente criaria um escritório para o meu escritório de TI.


Surpresas cartográficas


Embora eu já tivesse alguma experiência com o OSM, algo novo sempre aparecia.


Por exemplo, Yaroslavl acabou por ter um circuito externo aberto. Visualmente, parece fechado, mas refere-se a nós e linhas ausentes. Pode haver um problema de exportação.


Muito vício foi encontrado dentro dos limites das cidades. Na minha ingenuidade, pensei que a fronteira de uma cidade é sempre uma simples linha quebrada e fechada. Mas não.


Existem cidades com buracos. Por exemplo, Obninsk. Ou seja, aqui realmente uma peça dentro da cidade não lhe pertence administrativamente.



Obninsk com um buraco


Existem cidades que consistem em várias áreas não relacionadas, como Kirov. Além disso, se na parte do meio de Kirov houver vários quartos, então a esquerda, a menor é geralmente apenas um pedaço da estrada que leva ao aeroporto e quatro casas. Qual foi o sal para cortar tal pedaço e anexá-lo à cidade?



Kirov consiste em três áreas não relacionadas


Certamente, se o programa BDSM continuar e eu continuar participando, vou me familiarizar com algumas situações cartográficas não triviais que não consigo imaginar imediatamente.


Problemas de layout do mapa


Algumas palavras sobre a marcação OSM.


Nas últimas cidades que processei, fui confrontado com o fato de as pessoas não colocarem etiquetas de uso do solo ou colocá-las de alguma forma. De fato, para uma pessoa que está longe da TI, o significado profundo dessas tags pode não ser muito claro. Bem, pense, eles mudam a cor do mapa (áreas residenciais cinza, áreas industriais rosa, etc.), parece sem princípios. E, portanto, muitos se relacionam com eles casualmente.


No entanto, na minha opinião, a força do OSM está na capacidade de fabricar grandes volumes de dados, como o que fiz aqui ou no Sight Safari. Existem simplesmente muitos cartões na Internet, mas não conheço mais cartões com a capacidade de esvaziar toda a geometria e tags e usá-los livremente nos meus algoritmos. E apenas para esses fins, essas tags começam a desempenhar um papel importante. Como as tarefas quase sempre parecem “encontrar algo lá em áreas de um certo tipo”, e a etiqueta de uso do solo é a primeira e mais fácil maneira de identificar e encontrar as áreas de que você precisa.


O mesmo, mas em menor grau, se aplica a várias outras tags, por exemplo, especificando o tipo de uso (bem, isso não é apenas uma área residencial, mas um prédio baixo). Eles geralmente não são cozidos no vapor para colocar, provavelmente porque não vêem muitos benefícios neles. E, de fato, se você usar apenas navegadores e mapas on-line, eles não serão visíveis lá. Mas é precisamente para o processamento da máquina de dados cartográficos que eles podem fornecer dicas valiosas e simplificar algoritmos.


Em geral, coloque tags, senhores! Bem, por favor!


E sim, com base nos problemas que encontrei, repassei os cartões e coloquei algumas tags. Portanto, o benefício para a comunidade desse projeto também foi desenhado.


Então, para onde enviei o prefeito?


Como não participei das filmagens em si, e a maior parte do meu trabalho foi concluída antes das filmagens do primeiro episódio, fui forçado a me contentar com as mesmas informações fragmentárias de fontes públicas de todos os outros.


Em geral, seria um pouco idiota se meu algoritmo os levasse completamente a algum deserto. Tornou-se especialmente idiota quando li isso em um post sobre Ivanovo:


Vladimir Sharypov, o prefeito da cidade, deixou uma boa impressão. Pessoa aberta e franca. Eu diria muito franco para um funcionário. A conversa foi interessante. Fomos a Sort, onde ocorreu espontaneamente uma reunião com alguns eleitores.

imagem


Tudo ficaria bem, mas às 14 horas não há sóbrio em Sort. Nos termos do programa, o prefeito deve andar sem segurança. Até em algum momento pensei que haveria uma briga, pois alguns cidadãos estavam claramente em uma condição inadequada. Mas nada aconteceu.

E, finalmente, a primeira série do canal foi lançada, você pode assistir.



Quando o algoritmo escolheu Commodity Lane no mapa de Yevpatoriya, Ilya também parecia ter dúvidas, em qualquer caso, ele perguntou se o prefeito estava com medo. O nome é tal que imediatamente evoca pensamentos de algumas fábricas sombrias e abandonadas, estradas sujas e pessoas escuras com um olhar duro (perdoe-me os habitantes de Yevpatoria, se não for assim).


Conclusão


O trabalho nesse projeto acabou sendo interessante. Sem sair de casa, fiz uma pequena viagem às cidades do meu país, subi com uma lupa em todos os mapas possíveis e me familiarizei com o sabor cartográfico local. No caminho, também finalizei o código do Sight Safari.


Como você pode ver, não é uma tarefa tão trivial cavar em mapas e escolher pontos aleatórios. E para todo algoritmo óbvio, a vida está pronta para oferecer uma dúzia de cidades onde não funciona.


Como propaganda: Atualmente, estou fazendo tudo isso no Instituto de Design e Estudos Urbanos da ITMO. Lá, fazemos muitas coisas interessantes relacionadas aos dados de TI e da cidade, se alguém estiver interessado neste tópico - venha nos estudar na magistratura ou no trabalho.


Durante a preparação do projeto, o código e a experiência do projeto Sight Safari , um navegador para pesquisar rotas turísticas, foram usados ​​ativamente.


E finalmente: você acha que essa iniciativa é útil - como caminhadas com prefeitos? Eles vão mudar alguma coisa? Que perguntas você faria ao prefeito de sua cidade?

Source: https://habr.com/ru/post/pt416899/


All Articles