sosbrumadinho / brumadinho_location

Conjunto de ferramentas para ajudar no resgate e localização das vítimas atingidas pelo rompimento da barragem que ocorreu recentemente em Brumadinho/MG
MIT License
869 stars 129 forks source link

Backend - where we had searched #41

Closed vaniaon closed 5 years ago

vaniaon commented 5 years ago

Create a service that receives geolocations info as parameter and stores it in a data repository. This service also needs to provide a list of all locations already visited.

Related #40

brunolcarli commented 5 years ago

Can this be a django app running with serializers? The API will receive CRUD and store on database, the data will be displayed as json that will be consumed by the front-end.

captura de tela 2019-01-29 as 00 15 54 captura de tela 2019-01-29 as 00 16 04 captura de tela 2019-01-29 as 00 16 19

brunolcarli commented 5 years ago

I've sent a PR withe the project, hope it helps.

Gotta work to do in it like change the database used (actually using SQLite but not recommended), and find a server to host it.

Later after my work i'll refine this, and sure all hel is needed to develop it.

vaniaon commented 5 years ago

Just saw your comment and updated the project readme. As I said there, the first in the project can choose the language and technology :)

vaniaon commented 5 years ago

PR #43

vaniaon commented 5 years ago

O projeto está em https://github.com/dieegom/brumadinho_location/tree/develop/geolocations_service/service na branch develop

dezoito commented 5 years ago

As a suggestion, I propose adding optional fields for date, radius (i.e. 30m around marker point) and observations (Something like: This place needs to be revisited with special equipment).

The radius would allow a circumference to be drawn on the map and give a better perspective one the area covered.

JBezerra commented 5 years ago

@brunolcarli Tudo certo cara? tou com tua aplicação rodando aqui, eu so nao entendi o intuito dos 2 endpoints, no /geolocations/ ele cadastra os locais por Lat e Long via POST e via GET ele mostra os locais que ja foram visitados em Lat e Long, beleza.

Mas nao entendi porque no /visited_locations/ eu posso escolher uma Lat e uma Long cadastra no /geolocations/ e dar um nome a ela se no /visited_locations/ quando a gente pega a lista completa via GET eu nao tenho acesso ao nome que eu dei a sua respectiva Lat e Long, qual o intuito desse endpoint?

brunolcarli commented 5 years ago

@JBezerra criei o endpoint /api/geolocations/ para poder cadastrar, listar e recuperar todas as localizações de que tenhamos certeza que pertence a zona afetada.

No endpoint /api/visited_locations/ poderá cadastrar e uma região específica baseada em sua localização, e identificá-la por uma referencia. Na última atualização que estou a trabalhar agora este endpoint receberá mais um campo para data de investigação desta localização e número de pessoas encontradas nesta localização.

Adicionarei também um endpoint /api/found_people/ para cadastrar e recuperar informações de pessoas encontradas, incluindo nome, localização, gênero e condição de saúde.

JBezerra commented 5 years ago

@brunocroh Fala Bruno! tudo certo? tou fazendo um front com seu back em que pego os seus dados do /api/geolocations/ e ploto no mapa de calor pra saber onde eles ja foram ou nao, preciso o mais rapido que voce puder que voce mude o retorno pelo menos desse endpoint para um retorno GeoJSON, é bem simples, ao inves de voce retornar um JSON normal voce retorna um JSON nesse formato aqui:

{
  "type": "FeatureCollection",
  "features": [
    {
      "geometry": {
        "type": "Point",
        "coordinates": [-44.1264581,-20.1255982]  // Long e Lat
      },
      "type": "Feature",
      "properties": {}
    },
   {
      "geometry": {
        "type": "Point",
        "coordinates": [-43.1264581,-20.1195982]  // Long e Lat
      },
      "type": "Feature",
      "properties": {}
    }]
}

Pra cada long e lat voce so precis retornar um objeto geometry desse dentro da lista "features", seria possivel?

brunolcarli commented 5 years ago

@JBezerra vou fazer!

brunolcarli commented 5 years ago

Ok to meio perdido aqui tentando fazer funcionar nesse padrão.

Ajustei todos os paranauês pra rodar com posgresql e tenho a tela do enpoint sem dados assim:

captura de tela 2019-01-31 as 23 07 37

brunolcarli commented 5 years ago

Mas não sei como inserir dados aqui, todas as formas que tento ele da um erro diferente:

brunolcarli commented 5 years ago
# Models
class Geolocation(models.Model):

    coordinates = gis_models.PointField()

# serializers
class GeolocationSerializer(gis_serializer.GeoFeatureModelSerializer):
    class Meta:
        model = Geolocation
        fields = "__all__"
        geo_field = "coordinates"

# views
class GeolocationViewSet(viewsets.ModelViewSet):
    queryset = Geolocation.objects.all()
    serializer_class = GeolocationSerializer

I never have used this before, what am i missing? what have a done wrong?

Someone could help?

JBezerra commented 5 years ago

@brunolcarli tu tem como fazer diferente, acompanha: 1 - Salva os Dados como tu tava salvando antes, certo? lat e long tudo certinho 2- Na hora de MOSTRAR tu cria um grande objeto

{
  "type": "FeatureCollection",
  "features": []
}

3 - Cria um array, vamo chamar ele de features, e vai colocando esses objetos:

{
      "geometry": {
        "type": "Point",
        "coordinates": [Long,Lat] 
      },
      "type": "Feature",
      "properties": {}
    }

4 - Adiciona no teu array 5 - "Features": features 6 - retorna tudo pra pagina

Nao é como se tu precisasse mudar o banco, mas talvez mais simples é so trocar como ele lida com o dado

brunolcarli commented 5 years ago

desta forma está correto @JBezerra ?

captura de tela 2019-02-01 as 00 37 46

JBezerra commented 5 years ago

@brunolcarli perfeito!!!! valeu monstro, so da push que eu ja modifico o meu aqui pra pegar da API

brunolcarli commented 5 years ago

Vou dar push aqui pra que vc possa dar continuidade no seu trabalho, ams tenho que corrigir várias coisas ainda, a começar pelo campo de input deste endpoint.

ele está esperando:

{
    "latitude": Float,
    "longitude": Float,
    "coordinates": null
}

Deixei o coordinates como opcional pois ele NAO DEVE ser preenchido, se preencher ele de forma que não receba um objeto Point() definido pelo django.contrib.gis.geos vai retornar um erro. Então não forneça nada ou forneça null para este campo e preencha somente latitude e longitude pelo menos até eu achar uma forma de consertar isso.

:D

brunolcarli commented 5 years ago

Ah e tive um trabalhinho pra ajustar as novas configs, me avise aqui se tiver problemas pra configurar o serviço, agora está rodando com postgis

brunolcarli commented 5 years ago

PR aberto em https://github.com/sosbrumadinho/brumadinho_location/pull/93

JBezerra commented 5 years ago

@brunolcarli da uma olhadinha nesse erro, nao roda nenhum comando screen shot 2019-02-01 at 00 25 38

brunolcarli commented 5 years ago

@JBezerra como sugerido pelo @cacarrara as settings devem ser criadas em um arquivo .env na raiz desta aplicação, padronizando com o projeto em /core deste repositório.

para lhe adiantar tempo eis aqui o arquivo modo como eu usei:

DEBUG=TRUE
SECRET_KEY=&@9mr668o!*p1=jk$=#i+l5z4*qg)s1_ey!+i*o@&%!t#c+ra2
ALLOWED_HOSTS=*

DB_NAME=geoservice
DB_USER=lem4fia
DB_PASSWORD=root
DB_HOST=localhost
DB_PORT=5432

provavelmente vc vai precisar modificar o valor das variáveis DB para coincidir com as configurações rodando em sua máquina.

crie um arquivo chamado .env contendo estas configurações e coloque-o na raiz do serviço: captura de tela 2019-02-01 as 07 54 57

isso deve funcionar

JBezerra commented 5 years ago

@brunolcarli me da teu contato pessoal pra agt conseguir se comunicar com mais facilidade, eu consegui aqui instalar o postgre na minha maquina mas estou tendo outros erros, por exemplo da uma olhadinha aqui

screen shot 2019-02-01 at 13 48 34

isso acontece eu creio porque eu nao rodei o migrate, mas quando eu tento rodar da isso

screen shot 2019-02-01 at 13 49 47

ai eu tou meio perdido pq nunca fiz nada com Django

brunolcarli commented 5 years ago

@JBezerra meu whats: 41 99828-7053