Estou pesquisando no Google por algumas semanas, mas tenho algumas dificuldades para descobrir por onde começar meu projeto e que parte das pilhas geográficas disponíveis são obrigatórias para minhas necessidades.
Tenho uma sólida experiência em Java, algum interesse pelo Python e totalmente aberto para aprender algumas novas tecnologias.
Como hobby, e por estar intimamente relacionado ao meu trabalho, pretendo desenvolver um jogo de guerra estratégico para MMO na Web, fortemente baseado em mapas interativos (basicamente para exibir a situação tática e dar ordens às unidades).
Aqui está o que eu estava pensando:
- Geoserver para servir mapas e camadas.
- PostGIS para armazenar geodatas.
- GeoExt para exibir em um navegador
- Apache Clique como servidor de aplicativos Java (resolução de combate, gerenciamento de unidades)
Consegui implantar um GeoServer (guerra no tomcat, mais fácil é difícil) Consegui instalar o PostGreSQL Executo alguns tutoriais sobre o GeoExt. Preciso experimentar um pouco de Javascript. Eu brinquei com o Apache Click para servir páginas e formulários.
Aqui está o fluxo que eu estava pensando:
- O GeoServer serve os planos de fundo e as camadas do mapa construídos a partir de dados PostGIS para objetos estáticos (cidades, pontos de vitória, territórios, ...)
- O Apache Click gera páginas HTML + GeoExt no navegador do cliente.
- O Apache Click envia comandos CRUD para o PostGIS em resposta à ação do usuário.
- [algo] atualiza regularmente o PostGIS (movimentos, resolução de combate, gerenciamento de características da unidade ...)
- O Apache Click gera dinamicamente arquivos KML para atualizar ao vivo o navegador (KML NetworkLink?) Para unidades exibidas com ícones, zonas (alcance, detecção ...) ...
E agora, o tijolo que faltava na minha pequena parede:
- Como posso implementar uma camada "mar / terra". Por exemplo, para invalidar um movimento de navio que passa em terra? Camada GeoServer? Zonas definidas no PostGIS?
- O fluxo a seguir é reativo o suficiente para atualizar o mapa após uma ação do usuário: Evento HTML / GeoExt -> Apache Clique em processo -> Atualização PostGIS -> Atualização da camada GeoServer -> exibição HTML / GeoExt
O ponto principal é: onde estão os dados se eu quiser usá-los para cálculo e atualização? Camada estática do GeoServer ou tabelas PostGIS?
Respostas:
Para responder à pergunta Como posso implementar uma camada "mar / terra".
Você pode obter a costa e a camada do mar a partir do recém-lançado Nature Earth v2.
Pode ser muito preciso para suas necessidades, mas com alguma generalização você poderá carregá-lo no postgis e defini-lo como mar ou terra. Em seguida, o movimento do seu navio pode conter (http://www.postgis.org/docs/ST_Contains.html) uma vice-versa com o movimento do tanque. O ar seria um caminho diferente e mais complexo, pois você precisaria conhecer a localização atual e elaborar um aeródromo ou porta-aviões terrestre mais próximo para reabastecimento (a menos que o reabastecimento ar-ar seja permitido ..)
Boa sorte com o desenvolvimento do jogo.
http://www.naturalearthdata.com/blog/misc Miscellaneous/natural-earth-v2-0-0-release-notes/
Área de download http://www.naturalearthdata.com/downloads/
fonte
Você provavelmente atualizaria os post gis através de chamadas de procedimento do seu servidor. Por um lado, todo o material geográfico não é necessário e apresenta muita flexibilidade e seria muito lento e exigente para o processador, mesmo para um usuário. Você pode ter um polígono terrestre e marítimo em uma camada e adicionar uma coluna +1 na tabela para linhas do mar e uma coluna -1 para terra. se a lat lon retornada de um evento de localização fosse mais ou menos, isso acionaria uma regra que invalidaria a mudança para a unidade marítima ou terrestre. Você também pode usar um modelo de elevação digital com o nível z como mais ou menos. Os jogos geralmente têm terrenos, mas isso não significa que eles são construídos usando SIG! Eu estudaria como um mecanismo de jogo popular lida com terrenos e como os desenvolvedores criam esses terrenos, escolha seu jogo de código aberto favorito. No meu caso, é BZFlag; )
fonte