Por causa dass medidas impostas em Portugal, e um pouco por todo o mundo, para evitar a propagação da COVID-19, os eventos da CreativeMornings Porto tiveram que passar a ser realizados online. Naturalmente a fotografia dos eventos ficou posta de parte e por isso começamos a pensar como poderíamos preencher o espaço deixado vazio pelas fotos no Flickr. Espaço foi a palavra-chave. Os eventos não vão ocorrer num espaço fisico mas no espaço virtual. No entanto, cada participante assiste ao evento no seu espaço físico e estes espaço estão dispersos num espaço geográfico. Um mapa surgiu, então, como a forma natural de representar o espaço do evento.

Poderíamos fazer isto de múltiplas formas, mas aproveitei a oportunidade para criar uma definição com o Grasshopper de modo que pudesse ser reutilizável. O passo inicial é obter a base cartográfica e para isso existem múltiplos plugins, por exemplo o Heron, Elk, Meerkat ou o Mosquito, para além do componente Import SHP que vem com o Grasshopper. Decidi usar o Mosquito para importar os mapas do OpenStreetMaps e o Heron para obter as coordenadas geográficas (Lat/Lon) a partir de moradas. O Mosquito também tem um componente que devolve coordenadas a partir de moradas, no entanto não admite listas de moradas. Uma das ideias iniciais era usar as coordenadas GPS nos metadados das fotografias mas as fotografias chegaram sem esses dados.

Foi pedido a cada participante que tirasse duas fotos suas e que indicasse a freguesia e o concelho de onde estava a assistir ao evento. Recebi as imagens com os nomes no seguinte formato: Nome Sobrenome_Freguesia_Concelho.jpg. Usei o plugin Human para mapear a foto de cada participante numa superfície sobre a respectiva localização geográfica. Por fim, como as moradas apenas descriminam a freguesia, vários participantes ficaram sobrepostos no mapa. Para resolver isto usei o Kangaroo para optimizar o posicionamento de cada uma das superficies, mantendo-as o mais próximo possível da coordenada original e o mínimo de sobreposição.


Passo 1

Primeiro fornece uma morada ao componente Location. Este devolve pontos com as coordenadas Lon/Lat para cada uma das localizações candidatas. Seleciona a primeira localização e alimenta um componente Circle. É aconselhável começar com um raio pequeno. O círculo é ligado à entrada Area do componente Map Vector. É possível obter elementos específicos do OpenStreetMaps usando Custom Search, por exemplo os limites administrativos. Também é possível centrar o mapa na origem do desenho ligando um valor verdadeiro (true) a CenterToWorld.

 

Passo 2

Obter os nomes das imagens a partir de uma pasta. Isto é possível com este script em C#. Em seguida filtrar os nomes da freguesia e concelho e formatar a morada de modo que o componente Heron’s ESRI REST Service Geocode entenda.

 

Passo 3

Reprojetar os pontos de coordenadas Lat/Lon para o sistema de coordenadas usado pelo Mosquito no modelo do Rhino, com o componente MapProject. Este componente espera as coordenadas invertidas (Lon/Lat).

Ao contrário do esperado, apareceram vários participantes de fora da Área Metropolitana do Porto. O Mosquito não é a ferramenta ideal para lidar com dados à escala nacional porque requisita sempre ao servidor as estradas principais. O problema é que à escala do país o volume de dados é grande e torna o modelo muito lento. Uma solução simples foi importar um ficheiro SHP com as fronteiras nacionais, disponível aqui, e escalar a fronteira e as localizações dos participantes para uma área mais pequena junto ao mapa da área metropolitana.


Passo 4

As coordenadas X/Y e o mapa do país são escalados para caberem num mapa mais pequeno junto ao mapa da Área Metropolitana. O primeiro passo é verificar quais os pontos que estão fora do mapa da Área Metropolitana, para em seguida os escalar. Para isso usei um componente de um plugin que desenvolvi mas ainda não lancei, em alternativa é possível usar o componente Point in Curve do Grasshopper, com as devidas alterações.

 

Passo 5

O último passo é otimizar a localização das imagens no mapa para evitar sobreposições. A primeira coisa a fazer é mover os pontos aleatoriamente, para não serem exactamente coincidentes, para isso usei um gerador de vetores aleatórios. É possivel, com mais algum trabalho, obter o mesmo efeito usando o gerador de números aleatórios do Grasshopper. A próxima etapa é colocar retângulos com centro nos pontos, testar as colisões e otimizar usando o componente Solver do Kangaroo. Por último, os rectângulos são transformados em superficies e as imagens mapeadas como materiais usando o componente Custom Preview Materials do plugin Human.

 

Resultado

CM Map
O resultado final na vista Top do Rhino pode ser exportado para vários formatos.

Leave a Reply

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

four − 1 =


@