Unity Version: 2019.2.8f1 Link
Python Version: 3.7.5 (Guia de instalação abaixo)
Visual Studio Code: necessário para compilar alguns componenetes e o projeto do Unity. O instalador do Unity deve fazer o download automaticamente para você. Se não o fizer, baixe a versão mais recente do site oficial.
Baixe também o Visual Studio Build Tools e instale.
Na instalação deste, selecione o checkbox C++ Build Tools e clique em "Install".
Reinicie o computador depois de instalar o Unity e os componentes do Visual Studio.
Para fazer o setup de todas as bibliotecas existem diversas maneiras. Algumas têm uma série de problemas na instalação e muitas dificuldades. A maneira abaixo foi a forma mais simples que encontrei de fazer o setup completo.
Instalação via Anaconda
- Download Anaconda Python 3.7
- Instale usando as configurações padrão
- Abra o console Anaconda (Iniciar > Busca > Anaconda)
- Rode o seguinte comando
conda create -n gdal_env -c conda-forge gdal
- Aguarde até que a instalação finalize
Esse procedimento criará um ambiente do python contendo o GDAL instalado bem como suas dependências.
Depois que o ambiente estiver configurado pelo Anaconda, utilize o comando conda activate gdal_env
para trocar para o ambiente correto.
Você pode desativar e voltar para o ambiente padrão com conda deactivate
.
Lembre-se que as bibliotecas serão instaladas somente no python dentro do ambiente gdal_env e só serão acessíveis de lá.
Em seguida, precisamos instalar algumas bibliotecas. Para isso, rode os seguintes comandos nessa ordem, com o ambiente ativo:
conda install rtree
conda install geopandas
conda install -c conda-forge rasterio
Com isso, todas as bibliotecas estão prontas para utilização.
- Clone o repositório inteiro para seu computador
- Abra a pasta MapPlot no Unity como um projeto
- Compile, se desejar
- Modifique o caminho de output do dataset no arquivo main.py
- Utilize o Python do ambiente gdal_env do Anaconda para rodar o main.py
- Selecione a imagem e o shapefile
- Ao clicar em Plot, o arquivo com o dataset é salvo na pasta do Unity
- Inicie a aplicação Unity
Shape da cidade de Campinas: Download CampinasSHP.zip Imagem .TIF contendo a cidade de Campinas: Download img_satelite.tif
OBS: o conjunto de arquivos shapefile dentro do zip precisa estar no mesmo diretório para que as bibliotecas do Python consigam adquirir todos os metadados corretamente. OBS2: por conter metadados, a imagem de satelite é bem pesada (aprox 200mb).
A ideia desta implementação é realizar uma comunicação mais robusta entre o módulo Python e o Unity. Utilizando este método, é possível transferir os dados tratados sem utilizar um arquivo intermediário para fazer a ponte entre os dois "sistemas".
Para isso, é necessário instalar uma nova biblioteca ao python. IMPORTANTE: ESTA BIBLIOTECA DEVE SER ADICIONADA DEPOIS DE INSTALAR TODOS OS COMPONENTES ANTERIORES.
conda install tornado
Após a instalação da biblioteca Tornado, é necessário adicionar uma correção em um dos arquivos principais para que o programa funcione.
Adicione as seguintes linhas de código logo após as importações do arquivo ioloop.py da biblioteca tornado.
if 'win' in sys.platform:
print('Redefining asyncio loop for Windows protocol.')
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
Este procedimento é necessário uma vez que a implementação dos loops assíncronos no Windows possui algumas diferenças para sistemas UNIX, criando a necessidade de explicitar o uso do sistema operacional.
Nota:
Para acessar o arquivo correto, abra o arquivo server.py deste projeto em um editor com suporte para Python (Visual Studio Code ou PyCharm).
Em seguida, vá até a última linha da função start_server:
tornado.ioloop.IOLoop.current().start()
Dê um CTRL + Click em ioloop para abrir a definição do pacote. O módulo ioloop.py deve aparecer em uma nova aba. Adicione as linhas de código acima e salve.