Open gmgall opened 7 years ago
Sugestão
CREATE TABLE modelr.experiment_result ( idexperiment_result serial NOT NULL, idexperiment integer, idresulttype integer, file_tiff character varying(255), file_png character varying(255), partition integer, algorithm character varying(100), "TSS" numeric(10,5), "AUC" numeric(10,5), sensitivity numeric(10,5), equal_sens_spec numeric(10,5), prevalence numeric(10,5), no_omission integer, spec_sens numeric(10,5), CONSTRAINT experiment_result_pkey PRIMARY KEY (idexperiment_result), CONSTRAINT fk_experimento_result FOREIGN KEY (idexperiment) REFERENCES modelr.experiment (idexperiment) MATCH SIMPLE ON UPDATE CASCADE ON DELETE RESTRICT, CONSTRAINT fk_resulttype2 FOREIGN KEY (idresulttype) REFERENCES modelr.resulttype (idresulttype) MATCH SIMPLE ON UPDATE CASCADE ON DELETE RESTRICT )
Vamos discutir os argumentos necessários nesse método a seguir.
Listando com calma todos os campos que julgo necessário para esse método:
1) Dados em ensemble
2) Path para os arquivos gerados
Esqueci alguma coisa?
Um método para informar o resultado gerado por finalModel()
e outro o gerado por ensemble()
também será necessário.
atualização do ws com os novos campos para armazenar os raster. @gmgall para informar os modelos gerados pelo finalModel() e pelo ensemble() basta criar um novo registro e alterar o idresulttype para 2 ou 3;
segue a descrição do serviço.
Pode ser enviado por GET ou POST https://model-r.jbrj.gov.br/ws/setresult.php?op=E&id=15&idresulttype=2
Parâmetros obrigatórios:
id -> ID do experimento; op -> operação {I - Incluir e A - Alterar) idresulttype -> O que está sendo armazenado (1;"Partições" 2;"Modelos Finais" 3;"Essembles" 4;"Outros" )
demais parâmetros:
partition -> numero da partição para idresulttype =1 algorithm-> algoritmo; tss -> tss; auc -> auc; sensitivit -> equal_sens_spec -> prevalence -> no_omission -> spec_sens -> kappa ->, raster_cut_path -> png_bin_path ->, png_cont_path -> png_cut_path ->
Eu fiz um teste via POST e não sei se ele foi bem sucedido.
Em Python fiz o seguinte:
>>> import urllib
>>> params = {'id': '68', 'op': 'I', 'idresulttype': '1', 'partition': '1', 'algorithm': 'BioClim', 'kappa': '0.07884737', 'spec_sens': '0.07884737', 'no_omission': '-1e-04', 'prevalence': '0.42095263', 'equal_sens_spec': '0.03498772', 'sensitivity': '0.01744386', 'auc': '0.847095283117975', 'tss': '0.573221977098435', 'raster_cut_path': 'teste', 'png_bin_path': 'teste', 'png_cont_path': 'teste', 'png_cut_path': 'teste'}
>>> query = urllib.urlencode(params)
>>> url = 'https://model-r.jbrj.gov.br/ws/setresult.php'
>>> f = urllib.urlopen(url, query)
>>> f.close()
>>> print contents
{"experiment":[{"id":"68","op": "1","msg": ""}]}
Funcionou? Pela resposta parece que não.
os valores numericos no banco estao com 5 casas decimais. vou alterar
Obter o Outlook para iOS
On Thu, Sep 14, 2017 at 1:54 PM -0300, "Guilherme Gall" notifications@github.com wrote:
Eu fiz um teste e não sei se ele foi bem sucedido.
Em Python fiz o seguinte:
import urllib params = {'id': '68', 'op': 'I', 'idresulttype': '1', 'partition': '1', 'algorithm': 'BioClim', 'kappa': '0.07884737', 'spec_sens': '0.07884737', 'no_omission': '-1e-04', 'prevalence': '0.42095263', 'equal_sens_spec': '0.03498772', 'sensitivity': '0.01744386', 'auc': '0.847095283117975', 'tss': '0.573221977098435', 'raster_cut_path': 'teste', 'png_bin_path': 'teste', 'png_cont_path': 'teste', 'png_cut_path': 'teste'} query = urllib.urlencode(params) url = 'https://model-r.jbrj.gov.br/ws/setresult.php' f = urllib.urlopen(url, query) f.close() print contents {"experiment":[{"id":"68","op": "1","msg": ""}]}
Funcionou? Pela resposta parece que não.
— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or mute the thread.
nao sei como k banco trata a entrada de valores com notação científica -1e-04. os demais campos alterei. faca mais um teste para verificar
Obter o Outlook para iOS
On Thu, Sep 14, 2017 at 1:57 PM -0300, rafaeloliveiralima@ibest.com.br wrote:
os valores numericos no banco estao com 5 casas decimais. vou alterar
Obter o Outlook para iOS
On Thu, Sep 14, 2017 at 1:54 PM -0300, "Guilherme Gall" notifications@github.com wrote:
Eu fiz um teste e não sei se ele foi bem sucedido.
Em Python fiz o seguinte:
import urllib params = {'id': '68', 'op': 'I', 'idresulttype': '1', 'partition': '1', 'algorithm': 'BioClim', 'kappa': '0.07884737', 'spec_sens': '0.07884737', 'no_omission': '-1e-04', 'prevalence': '0.42095263', 'equal_sens_spec': '0.03498772', 'sensitivity': '0.01744386', 'auc': '0.847095283117975', 'tss': '0.573221977098435', 'raster_cut_path': 'teste', 'png_bin_path': 'teste', 'png_cont_path': 'teste', 'png_cut_path': 'teste'} query = urllib.urlencode(params) url = 'https://model-r.jbrj.gov.br/ws/setresult.php' f = urllib.urlopen(url, query) f.close() print contents {"experiment":[{"id":"68","op": "1","msg": ""}]}
Funcionou? Pela resposta parece que não.
— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or mute the thread.
Fiz os ajustes no banco para aceitar os valores numéricos passados e funcionou. @gmgall rode novamente que deverá aparecer a mensagem
{"experiment":[{"id":"68","op": "I","msg": "Adicionado com sucesso"}]}
Agora recebi uma resposta de sucesso:
>>> params = {'id': '68', 'op': 'I', 'idresulttype': '1', 'partition': '1', 'algorithm': 'BioClim', 'kappa': '0.07884737', 'spec_sens': '0.07884737', 'no_omission': '-1e-04', 'prevalence': '0.42095263', 'equal_sens_spec': '0.03498772', 'sensitivity': '0.01744386', 'auc': '0.847095283117975', 'tss': '0.573221977098435', 'raster_cut_path': 'teste', 'png_bin_path': 'teste', 'png_cont_path': 'teste', 'png_cut_path': 'teste'}
>>> query = urllib.urlencode(params)
>>> f = urllib.urlopen(url, query)
>>> contents = f.read()
>>> print contents
{"experiment":[{"id":"68","op": "I","msg": "Adicionado com sucesso"}]}
>>> f.close()
Confirma a escrita no banco?
@gmgall Confirmado! Sucesso!!!!
Ok, confirmando se entendi como usar o método.
Para uma modelagem como o resultado abaixo (arquivos .txt
omitidos por brevidade)
$ tree -I '*txt' Eugenia\ florida\ DC./
Eugenia florida DC./
├── BioClim_bin_Eugenia florida DC._1.tif
├── BioClim_bin_Eugenia florida DC._2.tif
├── BioClim_bin_Eugenia florida DC._3.tif
├── BioClim_cont_Eugenia florida DC._1.tif
├── BioClim_cont_Eugenia florida DC._2.tif
├── BioClim_cont_Eugenia florida DC._3.tif
├── BioClim_cut_Eugenia florida DC._1.tif
├── BioClim_cut_Eugenia florida DC._2.tif
├── BioClim_cut_Eugenia florida DC._3.tif
├── BioclimEugenia florida DC._1001.png
├── BioclimEugenia florida DC._1002.png
├── BioclimEugenia florida DC._1003.png
├── BioclimEugenia florida DC._2001.png
├── BioclimEugenia florida DC._2002.png
├── BioclimEugenia florida DC._2003.png
├── BioclimEugenia florida DC._3001.png
├── BioclimEugenia florida DC._3002.png
├── BioclimEugenia florida DC._3003.png
├── Domain_bin_Eugenia florida DC._1.tif
├── Domain_bin_Eugenia florida DC._2.tif
├── Domain_bin_Eugenia florida DC._3.tif
├── Domain_cont_Eugenia florida DC._1.tif
├── Domain_cont_Eugenia florida DC._2.tif
├── Domain_cont_Eugenia florida DC._3.tif
├── Domain_cut_Eugenia florida DC._1.tif
├── Domain_cut_Eugenia florida DC._2.tif
├── Domain_cut_Eugenia florida DC._3.tif
├── DomainEugenia florida DC._1001.png
├── DomainEugenia florida DC._1002.png
├── DomainEugenia florida DC._1003.png
├── DomainEugenia florida DC._2001.png
├── DomainEugenia florida DC._2002.png
├── DomainEugenia florida DC._2003.png
├── DomainEugenia florida DC._3001.png
├── DomainEugenia florida DC._3002.png
├── DomainEugenia florida DC._3003.png
├── ensemble
│ ├── Eugenia florida DC._Final.bin.mean3_ensemble.png
│ ├── Eugenia florida DC._Final.bin.mean3_ensemble.tif
│ ├── Eugenia florida DC._Final.mean.bin7_ensemble.png
│ └── Eugenia florida DC._Final.mean.bin7_ensemble.tif
├── glm_bin_Eugenia florida DC._1.tif
├── glm_bin_Eugenia florida DC._2.tif
├── glm_bin_Eugenia florida DC._3.tif
├── glm_cont_Eugenia florida DC._1.tif
├── glm_cont_Eugenia florida DC._2.tif
├── glm_cont_Eugenia florida DC._3.tif
├── glm_cut_Eugenia florida DC._1.tif
├── glm_cut_Eugenia florida DC._2.tif
├── glm_cut_Eugenia florida DC._3.tif
├── glmEugenia florida DC._1001.png
├── glmEugenia florida DC._1002.png
├── glmEugenia florida DC._1003.png
├── glmEugenia florida DC._2001.png
├── glmEugenia florida DC._2002.png
├── glmEugenia florida DC._2003.png
├── glmEugenia florida DC._3001.png
├── glmEugenia florida DC._3002.png
├── glmEugenia florida DC._3003.png
├── Mahal_bin_Eugenia florida DC._1.tif
├── Mahal_bin_Eugenia florida DC._2.tif
├── Mahal_bin_Eugenia florida DC._3.tif
├── Mahal_cont_Eugenia florida DC._1.tif
├── Mahal_cont_Eugenia florida DC._2.tif
├── Mahal_cont_Eugenia florida DC._3.tif
├── Mahal_cut_Eugenia florida DC._1.tif
├── Mahal_cut_Eugenia florida DC._2.tif
├── Mahal_cut_Eugenia florida DC._3.tif
├── MahalEugenia florida DC._1001.png
├── MahalEugenia florida DC._1002.png
├── MahalEugenia florida DC._1003.png
├── MahalEugenia florida DC._2001.png
├── MahalEugenia florida DC._2002.png
├── MahalEugenia florida DC._2003.png
├── MahalEugenia florida DC._3001.png
├── MahalEugenia florida DC._3002.png
├── MahalEugenia florida DC._3003.png
├── maxent_bin_Eugenia florida DC._1.tif
├── maxent_bin_Eugenia florida DC._2.tif
├── maxent_bin_Eugenia florida DC._3.tif
├── maxent_cont_Eugenia florida DC._1.tif
├── maxent_cont_Eugenia florida DC._2.tif
├── maxent_cont_Eugenia florida DC._3.tif
├── maxent_cut_Eugenia florida DC._1.tif
├── maxent_cut_Eugenia florida DC._2.tif
├── maxent_cut_Eugenia florida DC._3.tif
├── maxentEugenia florida DC._1001.png
├── maxentEugenia florida DC._1002.png
├── maxentEugenia florida DC._1003.png
├── maxentEugenia florida DC._2001.png
├── maxentEugenia florida DC._2002.png
├── maxentEugenia florida DC._2003.png
├── maxentEugenia florida DC._3001.png
├── maxentEugenia florida DC._3002.png
├── maxentEugenia florida DC._3003.png
├── presfinal
│ ├── Final.bin.mean3Eugenia florida DC.BioClim.png
│ ├── Final.bin.mean3Eugenia florida DC.BioClim.tif
│ ├── Final.bin.mean3Eugenia florida DC.Domain.png
│ ├── Final.bin.mean3Eugenia florida DC.Domain.tif
│ ├── Final.bin.mean3Eugenia florida DC.glm.png
│ ├── Final.bin.mean3Eugenia florida DC.glm.tif
│ ├── Final.bin.mean3Eugenia florida DC.Mahal.png
│ ├── Final.bin.mean3Eugenia florida DC.Mahal.tif
│ ├── Final.bin.mean3Eugenia florida DC.maxent.png
│ ├── Final.bin.mean3Eugenia florida DC.maxent.tif
│ ├── Final.bin.mean3Eugenia florida DC.rf.png
│ ├── Final.bin.mean3Eugenia florida DC.rf.tif
│ ├── Final.bin.mean3Eugenia florida DC.svm2.png
│ ├── Final.bin.mean3Eugenia florida DC.svm2.tif
│ ├── Final.bin.mean3Eugenia florida DC.svm.png
│ ├── Final.bin.mean3Eugenia florida DC.svm.tif
│ ├── Final.mean.bin7Eugenia florida DC.BioClim.png
│ ├── Final.mean.bin7Eugenia florida DC.BioClim.tif
│ ├── Final.mean.bin7Eugenia florida DC.Domain.png
│ ├── Final.mean.bin7Eugenia florida DC.Domain.tif
│ ├── Final.mean.bin7Eugenia florida DC.glm.png
│ ├── Final.mean.bin7Eugenia florida DC.glm.tif
│ ├── Final.mean.bin7Eugenia florida DC.Mahal.png
│ ├── Final.mean.bin7Eugenia florida DC.Mahal.tif
│ ├── Final.mean.bin7Eugenia florida DC.maxent.png
│ ├── Final.mean.bin7Eugenia florida DC.maxent.tif
│ ├── Final.mean.bin7Eugenia florida DC.rf.png
│ ├── Final.mean.bin7Eugenia florida DC.rf.tif
│ ├── Final.mean.bin7Eugenia florida DC.svm2.png
│ ├── Final.mean.bin7Eugenia florida DC.svm2.tif
│ ├── Final.mean.bin7Eugenia florida DC.svm.png
│ └── Final.mean.bin7Eugenia florida DC.svm.tif
├── rf_bin_Eugenia florida DC._1.tif
├── rf_bin_Eugenia florida DC._2.tif
├── rf_bin_Eugenia florida DC._3.tif
├── rf_cont_Eugenia florida DC._1.tif
├── rf_cont_Eugenia florida DC._2.tif
├── rf_cont_Eugenia florida DC._3.tif
├── rf_cut_Eugenia florida DC._1.tif
├── rf_cut_Eugenia florida DC._2.tif
├── rf_cut_Eugenia florida DC._3.tif
├── rfEugenia florida DC._1001.png
├── rfEugenia florida DC._1002.png
├── rfEugenia florida DC._1003.png
├── rfEugenia florida DC._2001.png
├── rfEugenia florida DC._2002.png
├── rfEugenia florida DC._2003.png
├── rfEugenia florida DC._3001.png
├── rfEugenia florida DC._3002.png
├── rfEugenia florida DC._3003.png
├── svm2_bin_Eugenia florida DC._1.tif
├── svm2_bin_Eugenia florida DC._2.tif
├── svm2_bin_Eugenia florida DC._3.tif
├── svm2_cont_Eugenia florida DC._1.tif
├── svm2_cont_Eugenia florida DC._2.tif
├── svm2_cont_Eugenia florida DC._3.tif
├── svm2_cut_Eugenia florida DC._1.tif
├── svm2_cut_Eugenia florida DC._2.tif
├── svm2_cut_Eugenia florida DC._3.tif
├── svm2Eugenia florida DC._1001.png
├── svm2Eugenia florida DC._1002.png
├── svm2Eugenia florida DC._1003.png
├── svm2Eugenia florida DC._2001.png
├── svm2Eugenia florida DC._2002.png
├── svm2Eugenia florida DC._2003.png
├── svm2Eugenia florida DC._3001.png
├── svm2Eugenia florida DC._3002.png
├── svm2Eugenia florida DC._3003.png
├── svm_bin_Eugenia florida DC._1.tif
├── svm_bin_Eugenia florida DC._2.tif
├── svm_bin_Eugenia florida DC._3.tif
├── svm_cont_Eugenia florida DC._1.tif
├── svm_cont_Eugenia florida DC._2.tif
├── svm_cont_Eugenia florida DC._3.tif
├── svm_cut_Eugenia florida DC._1.tif
├── svm_cut_Eugenia florida DC._2.tif
├── svm_cut_Eugenia florida DC._3.tif
├── svmEugenia florida DC._1001.png
├── svmEugenia florida DC._1002.png
├── svmEugenia florida DC._1003.png
├── svmEugenia florida DC._2001.png
├── svmEugenia florida DC._2002.png
├── svmEugenia florida DC._2003.png
├── svmEugenia florida DC._3001.png
├── svmEugenia florida DC._3002.png
└── svmEugenia florida DC._3003.png
Para informar cada partição, faço um post como o abaixo:
>>> params = {'id': '68',
'op': 'I',
'idresulttype': '1',
'partition': '1',
'algorithm': 'BioClim',
'kappa': '0.07884737',
'spec_sens': '0.07884737',
'no_omission': '-1e-04',
'prevalence': '0.42095263',
'equal_sens_spec': '0.03498772',
'sensitivity': '0.01744386',
'auc': '0.847095283117975',
'tss': '0.573221977098435',
'raster_cut_path': '/path/para/BioClim_cut_Eugenia florida DC._1.tif',
'png_bin_path': '/path/para/BioclimEugenia florida DC._1001.png',
'png_cont_path': '/path/para/BioclimEugenia florida DC._1002.png',
'png_cut_path': '/path/para/BioclimEugenia florida DC._1003.png'}
Isso já foi confirmado que está funcionando. :white_check_mark:
:one: Mas os arquivos BioClim_bin_Eugenia florida DC._1.tif
e BioClim_cont_Eugenia florida DC._1.tif
serão ignorados? Apenas o raster_cut_path
foi documentado como parâmetro.
:two: Como informar os resultados de finalModel()
? Pelo que entendi, é usando 'idresulttype': '2'
. Mas qual parâmetro usar para informar os arquivos Final.bin.mean3*
e Final.mean.bin7*
?
:three: Mesma dúvida para os arquivos gerados por ensemble()
: pelo que entendi, é usando 'idresulttype': '3'
, mas qual parâmetro uso para informar os arquivos *_Final.mean.bin7_ensemble.tif
e *_Final.bin.mean3_ensemble.tif
?
Forneça um exemplo dado os resultados de modelagem acima, iria ficar mais claro.
@gmgall Para cada modelo gerado (raster) a estrutura criada para armazenar é a seguinte: idexperiment , idresulttype , partition , algorithm , tss, auc , sensitivity , equal_sens_spec , prevalence , no_omission , spec_sens, raster_bin_path, raster_cont_path, raster_cut_path, png_bin_path, png_cont_path, png_cut_path , kappa
BioClim_bin_Eugenia florida DC._1.tif ├── BioClim_bin_Eugenia florida DC._2.tif ├── BioClim_bin_Eugenia florida DC._3.tif ├── BioClim_cont_Eugenia florida DC._1.tif ├── BioClim_cont_Eugenia florida DC._2.tif ├── BioClim_cont_Eugenia florida DC._3.tif ├── BioClim_cut_Eugenia florida DC._1.tif ├── BioClim_cut_Eugenia florida DC._2.tif ├── BioClim_cut_Eugenia florida DC._3.tif
Para esses arquivos a estrutura atende bem. O idresulttype = 1 (partições). Isso também irá funcionar bem para o essemble. Já para os demais eu não havia definido um idresulttype por não saber todos os tipos que seriam gerados. Criei o código idreusltype = 4 (outros) a idresulttype = 10 (outros 7) para você utilizar como achar melhor. Depois me diga qual código você usou para cada tipo e eu renomeio o registro na tabela.
Isso responde :one: da minha mensagem anterior: raster_bin_path
e raster_cont_path
não haviam sido documentadas a princípio nem aqui na issue nem no markdown com documentação no repositório.
:two: e :three: continuam sem resposta, ou não entendi o que você quis dizer.
Estou considerando que informo os resultados das funções do_algortimo()
via idresulttype = 1
, os resultados de finalModel()
via idresulttype = 2
e os resultados de ensemble()
via idresulttype = 3
.
Entendi corretamente?
E se entendi, que parâmetros uso para informar o path dos arquivos Final.bin.mean3*
e Final.mean.bin7*
(gerados por finalModel()
) e dos arquivos *_Final.mean.bin7_ensemble.tif
e *_Final.bin.mean3_ensemble.tif
(gerados por ensemble()
)?
Repito o que eu disse na mensagem anterior: forneça um exemplo de como informar os resultados da modelagem que apresentei, isso vai facilitar bastante.
Idealmente, documente todas as funções e seus parâmetros possíveis, com exemplos.
@gmgall faz o seguinte; o que você não souber onde colocar por falta de documentação, escolha aleatoriamente um número entre o número 4 e 10 (outros) para o IDResulttype e preencha os campos para os rasters (tiff) e png. O mais importante nesse momento é conseguirmos buscar esses arquivos para montar uma página de resultado. Att Rafael Lima
Bom dia! @gmgall , se entendi, para informar os demais resultados (ensemble e presfinal), utilizando seu exemplo acima, acho que ficaria assim:
>>> params = {'id': '68',
'op': 'I',
'idresulttype': '1',
'partition': '1',
'algorithm': 'BioClim',
'kappa': '0.07884737',
'spec_sens': '0.07884737',
'no_omission': '-1e-04',
'prevalence': '0.42095263',
'equal_sens_spec': '0.03498772',
'sensitivity': '0.01744386',
'auc': '0.847095283117975',
'tss': '0.573221977098435',
'raster_cut_path': '/path/para/BioClim_cut_Eugenia florida DC._1.tif',
'png_bin_path': '/path/para/BioclimEugenia florida DC._1001.png',
'png_cont_path': '/path/para/BioclimEugenia florida DC._1002.png',
'png_cut_path': '/path/para/BioclimEugenia florida DC._1003.png'}
>>> params = {'id': '68',
'op': 'I',
'idresulttype': '3',
'partition': '',
'algorithm': '',
'kappa': '',
'spec_sens': '',
'no_omission': '',
'prevalence': '',
'equal_sens_spec': '',
'sensitivity': '',
'auc': '',
'tss': '',
'raster_cut_path': '/path/para/Eugenia florida DC._Final.bin.mean3_ensemble.tif',
'png_bin_path': '',
'png_cont_path': '/path/para/Eugenia florida DC._Final.bin.mean3_ensemble.png',
'png_cut_path': 'AQUI VAI SER UM PNG, SEM BORDAS, GERADO A PARTIR DO TIF'}
>>> params = {'id': '68',
'op': 'I',
'idresulttype': '2',
'partition': '',
'algorithm': '',
'kappa': '',
'spec_sens': '',
'no_omission': '',
'prevalence': '',
'equal_sens_spec': '',
'sensitivity': '',
'auc': '',
'tss': '',
'raster_cut_path': '/path/para/Final.bin.mean3Eugenia florida DC.BioClim.tif',
'png_bin_path': '',
'png_cont_path': '/path/para/Final.bin.mean3Eugenia florida DC.BioClim.png',
'png_cut_path': 'AQUI VAI SER UM PNG, SEM BORDAS, GERADO A PARTIR DO TIF'}
Ao tentar usar os parâmetros sugeridos para informar os resultados de finalModel()
e ensemble()
, recebo como resposta o seguinte erro:
{"experiment":[{"id":"68","op": "I","msg": "N�o foi poss�vel adicionar"}]}
Continuo só tendo sucesso ao informar as partições.
Fico no aguardo de instruções ou documentação para prosseguir.
Acho o problema. Não era o numero da partição e sim o Kappa. Anteriormente o kappa estava com string e passou ser um valor numeric. O tratamento não estava sendo realizado por conta disso. @gmgall teste agora para ver se funciona.
@gmgall , Funcionou?
Ao que parece, funcionou. O commit Model-R/Middleware@408b3546d1272b59452c264e915dfddd2892d025 implementa as funções em Python que usarei para informar os resultados dos experimentos.
Apenas uma observação: o webservice está aceitando vários campos como opcionais, até alguns que teoricamente são obrigatórios. Exemplo:
>>> import urllib
>>> params = {'idresulttype': '2', 'id': '68', 'op': 'I'}
>>> url = 'https://model-r.jbrj.gov.br/ws/setresult.php'
>>> query = urllib.urlencode(params)
>>> f = urllib.urlopen(url, query)
>>> contents = f.read()
>>> print contents
{"experiment":[{"id":"68","op": "I","msg": "Adicionado com sucesso"}]}
As funções que escrevi tem os parâmetros como obrigatórios:
>>> # Passando 4 argumentos, como esperado
>>> import modelr
>>> modelr.inform_ensembles('68', '/path/para/Eugenia florida DC._Final.bin.mean3_ensemble.tif', '/path/para/Eugenia florida DC._Final.bin.mean3_ensemble.png', 'AQUI VAI SER UM PNG, SEM BORDAS, GERADO A PARTIR DO TIF')
{"experiment":[{"id":"68","op": "I","msg": "Adicionado com sucesso"}]}
>>> # Passando apenas 3 argumentos
>>> modelr.inform_ensembles('68', '/path/para/Eugenia florida DC._Final.bin.mean3_ensemble.tif', '/path/para/Eugenia florida DC._Final.bin.mean3_ensemble.png')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: inform_ensembles() takes exactly 4 arguments (3 given)
Pode ser relevante validar os parâmetros no webservice, especialmente se algum outro código além do meu no futuro for cliente dele.
Beleza @gmgall !
Já é possível fazer algum teste? Gerar alguns modelos?
Em relação a tabela 'idresulttype', pensamos em acrescentar outros tipos de resultados, como o exemplo abaixo. A ideia é criar a possibilidade de exibição de das 11 saídas possíveis dos modelos. Atualmente está sendo gerada a 3 e a 7 .
Tabela idresulttype atualmente:
idresulttype resulttype 1 Partições 2 Modelos Finais 3 Essembles 4 Outros 5 Outros 2 6 Outros 3 7 Outros 4 8 Outros 5 9 Outros 6 10 Outros 7
Tabela idresulttype nova:
idresulttype resulttype model 101 Partição Contínua PARTITION 102 Partição Binária PARTITION 103 Partição Cortada PARTITION 201 Pres Final 1 PRES FINAL 202 Pres Final 2 PRES FINAL 203 Pres Final 3 PRES FINAL 204 Pres Final 4 PRES FINAL 205 Pres Final 5 PRES FINAL 206 Pres Final 6 PRES FINAL 207 Pres Final 7 PRES FINAL 208 Pres Final 8 PRES FINAL 209 Pres Final 9 PRES FINAL 210 Pres Final 10 PRES FINAL 211 Pres Final 11 PRES FINAL 301 Ensemble 1 ENSEMBLE 302 Ensemble 2 ENSEMBLE 303 Ensemble 3 ENSEMBLE 304 Ensemble 4 ENSEMBLE 305 Ensemble 5 ENSEMBLE 306 Ensemble 6 ENSEMBLE 307 Ensemble 7 ENSEMBLE 308 Ensemble 8 ENSEMBLE 309 Ensemble 9 ENSEMBLE 310 Ensemble 10 ENSEMBLE 311 Ensemble 11 ENSEMBLE 400 Processado PROCESS
Além disso, mudaria o nome de alguns campos do webservice. Substitui:
'raster_cut_path' 'png_bin_path' 'png_cont_path' 'png_cut_path'
Por:
"tiff_path"(obrigatório) - será o raster do modelo "png_path" (obrigatório) - será aquele PNG com 'bordas' que já é gerado. "raster_png_path" (opcional) - será um PNG do raster do modelo sem bordas, mas que só será criado para os modelos do tipo "ENSEMBLE" (201 a 211).
Podemos fazer essas mudanças facilmente, só precisamos concordar com um padrão primeiro.
Em Model-R/Middleware@408b3546d1272b59452c264e915dfddd2892d0 criei funções que assumem a 1ª tabela para idresulttype
e campos nomeados conforme o padrão anterior (raster_cut_path
, png_bin_path
, png_cont_path
e png_cut_path
).
Faço novas funções quando tivermos definido tudo. Além do listado na mensagem anterior, mais alguma coisa será modificada?
Acho dese jeito está ok, já podemos implementar.
@gmgall , acho que já seria interessante implementar o retorno levando em consideração o exemplo que citei nessa mensagem.
Teremos mais alguma modificação no web service ou posso considerar o discutido até aqui como final?
Talvez, precise informar o 'extent' do modelo final (informado como "tiff_path" no ws). A princípio, o 'extent' do modelo é igual ao do raster informado como variáveis ambientais. Porém, dependendo do 'mask' o 'extent' pode mudar e esse novo deve ser informado para exibição no mapa web na interface.
@diogosbr se tem mask o modelo final já tem o extent do mask, se não me engano. O raster anterior não é o modelo final. Informar sempre o extent do modelo final resolveria isso. De outra forma seria informar o extent das variáveis ou o do mask, caso tenha mask. Você chegou a testar os png na interface?
SIm, poderia informar o extent do raster ou do mask, se houver. Os pngs estão funcionando sim. Daí informei o extent pra ele poder exibir.
@AndreaSanchezTapia , vc acha que seria interessante disponibilizar também a tabela "sdm.txt" para o usuário da interface?
Pro taxo não. Pro not-taxo pode ser uma boa ter um botão. Mas eu preciso de usar mais para saber.
Bom, então por enquanto acho que dá pra fechar assim. Informando o raster, os pngs e o extent do mask, se houver. Além dos outro parâmetros (tss, auc, ...).
Mas não fica melhor informar um extent só, o do modelo final? Se ele estiver cropado vai ser o do mask, se ele não estiver vai ser o das variáveis
Isso.
O formato combinado não parece ter sido implementado.
Favor ler https://github.com/Model-R/Front-end/issues/16#issuecomment-376981699
Então, voltando a essa discussão. Considerando a saída abaixo (coloquei só o Bioclim por brevidade):
.
├── ensemble
│ ├── Eugenia florida DC._Final.bin.mean3_ensemble.png
│ ├── Eugenia florida DC._Final.bin.mean3_ensemble.tif
│ ├── Eugenia florida DC._Final.bin.mean3_ensemble_without_margins.png
│ ├── Eugenia florida DC._Final.mean.bin7_ensemble.png
│ ├── Eugenia florida DC._Final.mean.bin7_ensemble.tif
│ └── Eugenia florida DC._Final.mean.bin7_ensemble_without_margins.png
├── final_models
│ ├── Final.bin.mean3Eugenia florida DC.BioClim.tif
│ ├── Final.bin.mean3Eugenia florida DC.Domain.tif
│ ├── Final.bin.mean3Eugenia florida DC.glm.tif
│ ├── Final.bin.mean3Eugenia florida DC.Mahal.tif
│ ├── Final.bin.mean3Eugenia florida DC.maxent.tif
│ ├── Final.bin.mean3Eugenia florida DC.rf.tif
│ ├── Final.bin.mean3Eugenia florida DC.svm2.tif
│ ├── Final.bin.mean3Eugenia florida DC.svm.tif
│ ├── Final.mean.bin7Eugenia florida DC.BioClim.tif
│ ├── Final.mean.bin7Eugenia florida DC.Domain.tif
│ ├── Final.mean.bin7Eugenia florida DC.glm.tif
│ ├── Final.mean.bin7Eugenia florida DC.Mahal.tif
│ ├── Final.mean.bin7Eugenia florida DC.maxent.tif
│ ├── Final.mean.bin7Eugenia florida DC.rf.tif
│ ├── Final.mean.bin7Eugenia florida DC.svm2.tif
│ └── Final.mean.bin7Eugenia florida DC.svm.tif
└── partitions
├── BioClim_bin_Eugenia florida DC._1.tif
├── BioClim_bin_Eugenia florida DC._2.tif
├── BioClim_bin_Eugenia florida DC._3.tif
├── BioClim_cont_Eugenia florida DC._1.tif
├── BioClim_cont_Eugenia florida DC._2.tif
├── BioClim_cont_Eugenia florida DC._3.tif
├── BioClim_cut_Eugenia florida DC._1.tif
├── BioClim_cut_Eugenia florida DC._2.tif
├── BioClim_cut_Eugenia florida DC._3.tif
├── BioclimEugenia florida DC._1001.png
├── BioclimEugenia florida DC._1002.png
├── BioclimEugenia florida DC._1003.png
├── BioclimEugenia florida DC._2001.png
├── BioclimEugenia florida DC._2002.png
├── BioclimEugenia florida DC._2003.png
├── BioclimEugenia florida DC._3001.png
├── BioclimEugenia florida DC._3002.png
├── BioclimEugenia florida DC._3003.png
Vou fazer chamadas como as abaixo para as partições contínuas, certo?
:one:
params = {'id': 'bd4c9ab730f5513206b999ec0d90d1fb',
'idresulttype': '101',
'op': 'I',
'partition': 1,
'algorithm': 'BioClim',
'kappa': 1111,
'spec_sens': 2222,
'no_omission': 3333,
'prevalence': 4444,
'equal_sens_spec': 5555,
'sensitivity': 6666,
'auc': 7777,
'tss': 8888,
'tiff_path': 'BioClim_cont_Eugenia florida DC._1.tif'
'png_path': 'BioclimEugenia florida DC._1001.png'
'raster_png_path': ''
}
:two: (omitindo os parâmetros numéricos por brevidade)
params = {'id': 'bd4c9ab730f5513206b999ec0d90d1fb',
'idresulttype': '101',
'op': 'I',
'partition': 2,
'algorithm': 'BioClim',
'tiff_path': 'BioClim_cont_Eugenia florida DC._2.tif'
'png_path': 'BioclimEugenia florida DC._1002.png'
'raster_png_path': ''
}
:three: (omitindo os parâmetros numéricos por brevidade)
params = {'id': 'bd4c9ab730f5513206b999ec0d90d1fb',
'idresulttype': '101',
'op': 'I',
'partition': 3,
'algorithm': 'BioClim',
'tiff_path': 'BioClim_cont_Eugenia florida DC._3.tif'
'png_path': 'BioclimEugenia florida DC._1003.png'
'raster_png_path': ''
}
Vou fazer chamadas como as abaixo para as partições binárias, certo?
:one:
params = {'id': 'bd4c9ab730f5513206b999ec0d90d1fb',
'idresulttype': '102',
'op': 'I',
'partition': 1,
'algorithm': 'BioClim',
'kappa': 1111,
'spec_sens': 2222,
'no_omission': 3333,
'prevalence': 4444,
'equal_sens_spec': 5555,
'sensitivity': 6666,
'auc': 7777,
'tss': 8888,
'tiff_path': 'BioClim_bin_Eugenia florida DC._1.tif'
'png_path': 'BioclimEugenia florida DC._2001.png'
'raster_png_path': ''
}
:two: (omitindo os parâmetros numéricos por brevidade)
params = {'id': 'bd4c9ab730f5513206b999ec0d90d1fb',
'idresulttype': '102',
'op': 'I',
'partition': 2,
'algorithm': 'BioClim',
'tiff_path': 'BioClim_bin_Eugenia florida DC._2.tif'
'png_path': 'BioclimEugenia florida DC._2002.png'
'raster_png_path': ''
}
:three: (omitindo os parâmetros numéricos por brevidade)
params = {'id': 'bd4c9ab730f5513206b999ec0d90d1fb',
'idresulttype': '102',
'op': 'I',
'partition': 3,
'algorithm': 'BioClim',
'tiff_path': 'BioClim_bin_Eugenia florida DC._3.tif'
'png_path': 'BioclimEugenia florida DC._2003.png'
'raster_png_path': ''
}
Vou fazer chamadas como as abaixo para as partições cortadas, certo?
:one:
params = {'id': 'bd4c9ab730f5513206b999ec0d90d1fb',
'idresulttype': '103',
'op': 'I',
'partition': 1,
'algorithm': 'BioClim',
'kappa': 1111,
'spec_sens': 2222,
'no_omission': 3333,
'prevalence': 4444,
'equal_sens_spec': 5555,
'sensitivity': 6666,
'auc': 7777,
'tss': 8888,
'tiff_path': 'BioClim_cut_Eugenia florida DC._1.tif'
'png_path': 'BioclimEugenia florida DC._3001.png'
'raster_png_path': ''
}
:two: (omitindo os parâmetros numéricos por brevidade)
params = {'id': 'bd4c9ab730f5513206b999ec0d90d1fb',
'idresulttype': '103',
'op': 'I',
'partition': 2,
'algorithm': 'BioClim',
'tiff_path': 'BioClim_bin_Eugenia florida DC._2.tif'
'png_path': 'BioclimEugenia florida DC._3002.png'
'raster_png_path': ''
}
:three: (omitindo os parâmetros numéricos por brevidade)
params = {'id': 'bd4c9ab730f5513206b999ec0d90d1fb',
'idresulttype': '103',
'op': 'I',
'partition': 3,
'algorithm': 'BioClim',
'tiff_path': 'BioClim_bin_Eugenia florida DC._3.tif'
'png_path': 'BioclimEugenia florida DC._3003.png'
'raster_png_path': ''
}
É isso mesmo? Acho o nome dos PNGs especialmente confusos. Fiz a correspondência corretamente?
Por favor confirmem se entendi como fazer as chamadas.
Isso mesmo Guilherme. Só uma coisa. No idresulttype = 303. O campo 'raster_png_path' precisa estar preenchido com o png sem bordas que será exibido no mapa
"Acho o nome dos PNGs especialmente confusos" -- vou tentar arranjar isso de algum modo, @gmgall @antunesmg passar para cont, bin e cut.
vocês querem que eu faça isso agora @gmgall ? posso editar diretamente aqui e comitar. Para cada tif BioClim_bin_Eugenia florida DC._3.tif
teria um png exatamente igual BioClim_bin_Eugenia florida DC._3.png
Por mim, tudo bem @AndreaSanchezTapia. É uma alteração muito complicada?
Não @gmgall, é super simples. Eu vou fazer esta mudança e mais outro par durante a semana e escrevo para vocês.
@gmgall aquela mudança do nome dos png ficou implementada no branch andrea do pacote. [Agora me liguei que deveria ser no master mas acho que vai ter um PR até semana que vem]
Como ficou essa issue? A modelagem está sendo feita no SD e o retorno dos resutados está sendo enviado para o JB? (@gmgall @antunesmg )
@AndreaSanchezTapia e o PR foi feito?
Acho que não está chegando nada aqui no JB
Não estou conseguindo mais usar esse método. Alguma coisa mudou?
Avisem-me caso eu esteja usando incorretamente, por favor.
Segue uma tentativa:
>>> params = {'id': 'bd4c9ab730f5513206b999ec0d90d1fb',
'idresulttype': '103',
'op': 'I',
'partition': 1,
'algorithm': 'BioClim',
'kappa': 1111,
'spec_sens': 2222,
'no_omission': 3333,
'prevalence': 4444,
'equal_sens_spec': 5555,
'sensitivity': 6666,
'auc': 7777,
'tss': 8888,
'tiff_path': 'BioClim_cut_Eugenia florida DC._1.tif',
'png_path': 'BioclimEugenia florida DC._3001.png',
'raster_png_path': ''}
>>> modelr.inform_experiment_results(params)
b'Array\n(\n [spec_sens] => 2222\n [op] => I\n [partition] => 1\n [png_path] => BioclimEugenia florida DC._3001.png\n [tss] => 8888\n [sensitivity] => 6666\n [raster_png_path] => \n [equal_sens_spec] => 5555\n [idresulttype] => 103\n [tiff_path] => BioClim_cut_Eugenia florida DC._1.tif\n [prevalence] => 4444\n [id] => bd4c9ab730f5513206b999ec0d90d1fb\n [kappa] => 1111\n [no_omission] => 3333\n [auc] => 7777\n [algorithm] => BioClim\n)\n<br />\n<b>Notice</b>: Trying to get property of non-object in <b>/var/www/html/rafael/modelr/ws/setresult.php</b> on line <b>27</b><br />\n<br />\n<b>Notice</b>: Trying to get property of non-object in <b>/var/www/html/rafael/modelr/ws/setresult.php</b> on line <b>27</b><br />\n<br />\n<b>Warning</b>: pg_exec(): Query failed: ERRO: erro de sintaxe em ou pr\xc3\xb3ximo a ","\nLINE 7: (,103,1,\n ^ in <b>/var/www/html/rafael/modelr/ws/setresult.php</b> on line <b>106</b><br />\n{"experiment":[{"id":"bd4c9ab730f5513206b999ec0d90d1fb","op": "I","msg": "N\xe3o foi poss\xedvel adicionar"}]}'
Resolvi o erro aqui. Pode testar de novo
Guilherme, conseguiu testar ?
Fiz novo teste e o erro parece ser o mesmo.
b'Array\n(\n [id] => bd4c9ab730f5513206b999ec0d90d1fb\n [no_omission] => 3333\n [sensitivity] => 6666\n [png_path] => BioclimEugenia florida DC._2001.png\n [prevalence] => 4444\n [op] => I\n [tss] => 8888\n [partition] => 1\n [idresulttype] => 103\n [spec_sens] => 2222\n [equal_sens_spec] => 5555\n [kappa] => 1111\n [raster_png_path] => \n [tiff_path] => BioClim_cut_Eugenia florida DC._1.tif\n [auc] => 7777\n [algorithm] => BioClim\n)\n<br />\n<b>Notice</b>: Trying to get property of non-object in <b>/var/www/html/rafael/modelr/ws/setresult.php</b> on line <b>27</b><br />\n<br />\n<b>Notice</b>: Trying to get property of non-object in <b>/var/www/html/rafael/modelr/ws/setresult.php</b> on line <b>27</b><br />\n<br />\n<b>Warning</b>: pg_exec(): Query failed: ERRO: erro de sintaxe em ou pr\xc3\xb3ximo a ","\nLINE 7: (,103,1,\n ^ in <b>/var/www/html/rafael/modelr/ws/setresult.php</b> on line <b>106</b><br />\n{"experiment":[{"id":"bd4c9ab730f5513206b999ec0d90d1fb","op": "I","msg": "N\xe3o foi poss\xedvel adicionar"}]}'
Tem como verificar se estou fazendo as chamadas corretamente por aí?
@gmgall era um bug meu aqui. Já resolvi. Pode fazer do mesmo jeito que você fez antes.
Certo, parece que avançamos.
Testando daqui com a biblioteca requests
do Python:
:one: O método de obter os experimentos por status parece ok:
>>> import requests
>>> payload = {'status': 2}
>>> r = requests.get('http://model-r.jbrj.gov.br/ws/', params=payload)
>>> x = r.json()
>>> type(x)
<class 'list'>
:two: O método que muda o status de um experimento também:
>>> import requests
>>> payload = {'id': 'bd4c9ab730f5513206b999ec0d90d1fb', 'status': 3}
>>> r = requests.get('https://model-r.jbrj.gov.br/ws/setstatus.php', params=payload)
>>> r.json()
{'experiment': [{'idexperiment': 'bd4c9ab730f5513206b999ec0d90d1fb', 'msg': '', 'update': 'true'}]}
:three: O método de informar o resultado de uma modelagem não dá mais erro, mas retorna mais do que o JSON experado:
>>> import requests
>>> payload = {'id': 'bd4c9ab730f5513206b999ec0d90d1fb', 'idresulttype': '102', 'op': 'I', 'partition': 3, 'algorithm': 'BioClim', 'kappa': 1111, 'spec_sens': 2222, 'no_omission': 3333, 'prevalence': 4444, 'equal_sens_spec': 5555, 'sensitivity': 6666, 'auc': 7777, 'tss': 8888, 'tiff_path': 'BioClim_bin_Eugenia florida DC._1.tif', 'png_path': 'BioclimEugenia florida DC._2001.png', 'raster_png_path': ''}
>>> r = requests.post('https://model-r.jbrj.gov.br/ws/setresult.php', data=payload)
>>> r.status_code
200
>>> r.text
'Array\n(\n [0] => stdClass Object\n (\n [idexperiment] => bd4c9ab730f5513206b999ec0d90d1fb\n [id] => 161\n [name] => teste issue 16\n [description] => teste issue 16\n [num_repetitions] => \n [num_partition] => \n [trainpercent] => \n [extent_model] => \n [buffer] => \n [num_points] => \n [tss] => \n [statusexperiment] => Em processamento\n [partitiontype] => \n [resolution] => \n [occurrences] => Array\n (\n [0] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -22.7\n [lon] => -45.3833333\n [idstatusoccurrence] => 17\n )\n\n [1] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -22.7\n [lon] => -45.3833333\n [idstatusoccurrence] => 17\n )\n\n [2] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -22.7\n [lon] => -45.3833333\n [idstatusoccurrence] => 17\n )\n\n [3] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -22.7166667\n [lon] => -45.45\n [idstatusoccurrence] => 17\n )\n\n [4] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -22.7166667\n [lon] => -45.45\n [idstatusoccurrence] => 17\n )\n\n [5] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -22.1741667\n [lon] => -44.6502778\n [idstatusoccurrence] => 17\n )\n\n [6] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -22.4616667\n [lon] => -43.0241667\n [idstatusoccurrence] => 17\n )\n\n [7] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -22.4280556\n [lon] => -44.6261111\n [idstatusoccurrence] => 17\n )\n\n [8] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -20.5161111\n [lon] => -41.0836111\n [idstatusoccurrence] => 17\n )\n\n [9] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -13.2644444\n [lon] => -41.9197223\n [idstatusoccurrence] => 17\n )\n\n [10] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -22.4080556\n [lon] => -44.8463889\n [idstatusoccurrence] => 17\n )\n\n [11] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -22.3833333\n [lon] => -42.4833333\n [idstatusoccurrence] => 17\n )\n\n [12] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -22.4875\n [lon] => -43.2961111\n [idstatusoccurrence] => 17\n )\n\n [13] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -22.3519444\n [lon] => -42.5855555\n [idstatusoccurrence] => 17\n )\n\n [14] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -22.4375\n [lon] => -44.6341667\n [idstatusoccurrence] => 17\n )\n\n [15] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -22.3138889\n [lon] => -44.7222223\n [idstatusoccurrence] => 17\n )\n\n [16] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -22.6197222\n [lon] => -45.0030555\n [idstatusoccurrence] => 17\n )\n\n [17] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -22.4322223\n [lon] => -42.5263889\n [idstatusoccurrence] => 17\n )\n\n [18] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -22.6225\n [lon] => -45.2588889\n [idstatusoccurrence] => 17\n )\n\n [19] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -22.6075\n [lon] => -45.2230556\n [idstatusoccurrence] => 17\n )\n\n [20] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -20.0905555\n [lon] => -43.4719445\n [idstatusoccurrence] => 17\n )\n\n [21] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -27.1788889\n [lon] => -49.4122222\n [idstatusoccurrence] => 17\n )\n\n [22] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -25.8688889\n [lon] => -48.9666667\n [idstatusoccurrence] => 17\n )\n\n [23] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -22.7433333\n [lon] => -44.6388889\n [idstatusoccurrence] => 17\n )\n\n [24] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -22.7630556\n [lon] => -44.6580556\n [idstatusoccurrence] => 17\n )\n\n [25] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -22.7461111\n [lon] => -44.6394444\n [idstatusoccurrence] => 17\n )\n\n [26] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -22.74\n [lon] => -44.6169445\n [idstatusoccurrence] => 17\n )\n\n [27] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -22.3775\n [lon] => -44.8177778\n [idstatusoccurrence] => 17\n )\n\n [28] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -22.3788889\n [lon] => -44.8261111\n [idstatusoccurrence] => 17\n )\n\n [29] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -22.3775\n [lon] => -44.8177778\n [idstatusoccurrence] => 17\n )\n\n [30] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -20.4372223\n [lon] => -43.48\n [idstatusoccurrence] => 17\n )\n\n [31] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -22.5011111\n [lon] => -45.15\n [idstatusoccurrence] => 17\n )\n\n [32] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -24.2666667\n [lon] => -49.15\n [idstatusoccurrence] => 17\n )\n\n [33] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -24.3166667\n [lon] => -49.2166667\n [idstatusoccurrence] => 17\n )\n\n [34] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -22.7463889\n [lon] => -44.6163889\n [idstatusoccurrence] => 17\n )\n\n [35] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -22.7497222\n [lon] => -44.6191667\n [idstatusoccurrence] => 17\n )\n\n [36] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -27.8097222\n [lon] => -49.9497222\n [idstatusoccurrence] => 17\n )\n\n [37] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -22.365\n [lon] => -44.7205556\n [idstatusoccurrence] => 17\n )\n\n [38] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -22.9566667\n [lon] => -44.5552778\n [idstatusoccurrence] => 17\n )\n\n [39] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -26.3666667\n [lon] => -49.4\n [idstatusoccurrence] => 17\n )\n\n [40] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -22.34\n [lon] => -42.7188889\n [idstatusoccurrence] => 17\n )\n\n [41] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -22.3319445\n [lon] => -42.7194445\n [idstatusoccurrence] => 17\n )\n\n [42] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -22.3358333\n [lon] => -42.7166667\n [idstatusoccurrence] => 17\n )\n\n [43] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -22.3361111\n [lon] => -42.7169445\n [idstatusoccurrence] => 17\n )\n\n [44] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -22.3236111\n [lon] => -42.7202778\n [idstatusoccurrence] => 17\n )\n\n [45] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -47.66\n [lon] => -14.0705556\n [idstatusoccurrence] => 17\n )\n\n [46] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -14.2772223\n [lon] => -47.9166667\n [idstatusoccurrence] => 17\n )\n\n [47] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -15.75\n [lon] => -51.55\n [idstatusoccurrence] => 17\n )\n\n [48] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => 6.0833333\n [lon] => -60.1166667\n [idstatusoccurrence] => 17\n )\n\n [49] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -10\n [lon] => -67.8333333\n [idstatusoccurrence] => 17\n )\n\n [50] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -22.5872222\n [lon] => -42.9111111\n [idstatusoccurrence] => 17\n )\n\n [51] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -22.675\n [lon] => -43.0694445\n [idstatusoccurrence] => 17\n )\n\n [52] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -12.2366666\n [lon] => -47.2686111\n [idstatusoccurrence] => 17\n )\n\n [53] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -14.3666667\n [lon] => -48.2\n [idstatusoccurrence] => 17\n )\n\n [54] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -17.8166667\n [lon] => -48.4833333\n [idstatusoccurrence] => 17\n )\n\n [55] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -1.4166667\n [lon] => -69.4166667\n [idstatusoccurrence] => 17\n )\n\n [56] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -12.8166667\n [lon] => -51.7666667\n [idstatusoccurrence] => 17\n )\n\n [57] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -13.4\n [lon] => -44.5833333\n [idstatusoccurrence] => 17\n )\n\n [58] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -10\n [lon] => -67.95\n [idstatusoccurrence] => 17\n )\n\n [59] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -12.2366666\n [lon] => -47.2686111\n [idstatusoccurrence] => 17\n )\n\n [60] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -12.3166667\n [lon] => -51.7666667\n [idstatusoccurrence] => 17\n )\n\n [61] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -15.4886111\n [lon] => -44.7605556\n [idstatusoccurrence] => 17\n )\n\n [62] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -1.25\n [lon] => -69.4166667\n [idstatusoccurrence] => 17\n )\n\n [63] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -13.75\n [lon] => -48.3166667\n [idstatusoccurrence] => 17\n )\n\n [64] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -1.0286111\n [lon] => -62.0891666\n [idstatusoccurrence] => 17\n )\n\n [65] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -22.5833333\n [lon] => -43.0333333\n [idstatusoccurrence] => 17\n )\n\n [66] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -12.25\n [lon] => -38.9666667\n [idstatusoccurrence] => 17\n )\n\n [67] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -22.5177778\n [lon] => -53.0430555\n [idstatusoccurrence] => 17\n )\n\n [68] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => 2.8333333\n [lon] => -59.5166667\n [idstatusoccurrence] => 17\n )\n\n [69] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -7.5166667\n [lon] => -63.1666667\n [idstatusoccurrence] => 17\n )\n\n [70] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -24.8333333\n [lon] => -49.1666667\n [idstatusoccurrence] => 17\n )\n\n [71] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -1.0027778\n [lon] => -62.5152778\n [idstatusoccurrence] => 17\n )\n\n [72] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -17.7166667\n [lon] => -48.5\n [idstatusoccurrence] => 17\n )\n\n [73] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -0.4166667\n [lon] => -66.4166667\n [idstatusoccurrence] => 17\n )\n\n [74] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -0.5\n [lon] => -65\n [idstatusoccurrence] => 17\n )\n\n [75] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => 13.3\n [lon] => -41.8\n [idstatusoccurrence] => 17\n )\n\n [76] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => 13.2333333\n [lon] => -41.6666667\n [idstatusoccurrence] => 17\n )\n\n [77] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => 13.2333333\n [lon] => -41.6666667\n [idstatusoccurrence] => 17\n )\n\n [78] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -21.2083333\n [lon] => -43.9155556\n [idstatusoccurrence] => 17\n )\n\n [79] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -22.5\n [lon] => -42.25\n [idstatusoccurrence] => 17\n )\n\n [80] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -22.5\n [lon] => -42.25\n [idstatusoccurrence] => 17\n )\n\n [81] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -22.5\n [lon] => -42.25\n [idstatusoccurrence] => 17\n )\n\n [82] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -22.5\n [lon] => -42.25\n [idstatusoccurrence] => 17\n )\n\n [83] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -22.5\n [lon] => -42.25\n [idstatusoccurrence] => 17\n )\n\n [84] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -22.5\n [lon] => -42.25\n [idstatusoccurrence] => 17\n )\n\n [85] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -22.5\n [lon] => -42.25\n [idstatusoccurrence] => 17\n )\n\n [86] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -22.5\n [lon] => -42.25\n [idstatusoccurrence] => 17\n )\n\n [87] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -22.5\n [lon] => -42.25\n [idstatusoccurrence] => 17\n )\n\n [88] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -22.5\n [lon] => -42.25\n [idstatusoccurrence] => 17\n )\n\n [89] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -22.5\n [lon] => -42.25\n [idstatusoccurrence] => 17\n )\n\n [90] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -22.5\n [lon] => -42.25\n [idstatusoccurrence] => 17\n )\n\n [91] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -15.8241667\n [lon] => -48.9983333\n [idstatusoccurrence] => 17\n )\n\n [92] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -22.35\n [lon] => -44.4786111\n [idstatusoccurrence] => 17\n )\n\n [93] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -22.1\n [lon] => -43.0666667\n [idstatusoccurrence] => 17\n )\n\n [94] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -22.9497222\n [lon] => -43.0213889\n [idstatusoccurrence] => 17\n )\n\n [95] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -22.465\n [lon] => -43.0322223\n [idstatusoccurrence] => 17\n )\n\n [96] => stdClass Object\n (\n [taxon] => Leandra carassana (DC.) Cogn.\n [lat] => -24.11\n [lon] => -52.3208334\n [idstatusoccurrence] => 17\n )\n\n [97] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -14.7094444\n [lon] => -48.4238889\n [idstatusoccurrence] => 17\n )\n\n [98] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -7.5166667\n [lon] => -63.1666667\n [idstatusoccurrence] => 17\n )\n\n [99] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -15.1602778\n [lon] => -39.5361111\n [idstatusoccurrence] => 17\n )\n\n [100] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -22.4897222\n [lon] => -43.0111111\n [idstatusoccurrence] => 17\n )\n\n [101] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -18.7769445\n [lon] => -40.4438889\n [idstatusoccurrence] => 17\n )\n\n [102] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -22.5\n [lon] => -42.25\n [idstatusoccurrence] => 17\n )\n\n [103] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -22.7916666\n [lon] => -47.0736111\n [idstatusoccurrence] => 17\n )\n\n [104] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -22.7916666\n [lon] => -47.0736111\n [idstatusoccurrence] => 17\n )\n\n [105] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -22.4333333\n [lon] => -42.8333333\n [idstatusoccurrence] => 17\n )\n\n [106] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -10.0366666\n [lon] => -67.7952777\n [idstatusoccurrence] => 17\n )\n\n [107] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -22.5258334\n [lon] => -42.3477777\n [idstatusoccurrence] => 17\n )\n\n [108] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -9.7102778\n [lon] => -52.3583333\n [idstatusoccurrence] => 17\n )\n\n [109] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -9.8225\n [lon] => -52.7444444\n [idstatusoccurrence] => 17\n )\n\n [110] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -6.8205556\n [lon] => -71.1219445\n [idstatusoccurrence] => 17\n )\n\n [111] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -21.1002778\n [lon] => -44.8680556\n [idstatusoccurrence] => 17\n )\n\n [112] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -22.6555556\n [lon] => -42.8275\n [idstatusoccurrence] => 17\n )\n\n [113] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -20.6294445\n [lon] => -41.5975\n [idstatusoccurrence] => 17\n )\n\n [114] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -22.85\n [lon] => -67.2\n [idstatusoccurrence] => 17\n )\n\n [115] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -21.55\n [lon] => -44.2666667\n [idstatusoccurrence] => 17\n )\n\n [116] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -22.9225\n [lon] => -42.9994444\n [idstatusoccurrence] => 17\n )\n\n [117] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -22.5166667\n [lon] => -43.2333333\n [idstatusoccurrence] => 17\n )\n\n [118] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -22.4766667\n [lon] => -43.5713889\n [idstatusoccurrence] => 17\n )\n\n [119] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -18.6675\n [lon] => -55.1677778\n [idstatusoccurrence] => 17\n )\n\n [120] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -22.4997222\n [lon] => -42.7952777\n [idstatusoccurrence] => 17\n )\n\n [121] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -7.6\n [lon] => -34.8205556\n [idstatusoccurrence] => 17\n )\n\n [122] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -22.85\n [lon] => -43.1166667\n [idstatusoccurrence] => 17\n )\n\n [123] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -9.5980555\n [lon] => -65.3672223\n [idstatusoccurrence] => 17\n )\n\n [124] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -9.7166667\n [lon] => -68.1166667\n [idstatusoccurrence] => 17\n )\n\n [125] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -1.3544444\n [lon] => -62.0591667\n [idstatusoccurrence] => 17\n )\n\n [126] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -9.7166667\n [lon] => -68.1166667\n [idstatusoccurrence] => 17\n )\n\n [127] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -3.3369444\n [lon] => -51.9913889\n [idstatusoccurrence] => 17\n )\n\n [128] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -22.3091667\n [lon] => -47.5458333\n [idstatusoccurrence] => 17\n )\n\n [129] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -14.1983333\n [lon] => -49.2922222\n [idstatusoccurrence] => 17\n )\n\n [130] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -14.1983333\n [lon] => -49.2919444\n [idstatusoccurrence] => 17\n )\n\n [131] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -11.9280556\n [lon] => -55.1583333\n [idstatusoccurrence] => 17\n )\n\n [132] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -22.5938889\n [lon] => -43.0338889\n [idstatusoccurrence] => 17\n )\n\n [133] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -7.9602778\n [lon] => -34.9447222\n [idstatusoccurrence] => 17\n )\n\n [134] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -18.5713889\n [lon] => -43.3441666\n [idstatusoccurrence] => 17\n )\n\n [135] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -20.7\n [lon] => -42.0666667\n [idstatusoccurrence] => 17\n )\n\n [136] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -11.52\n [lon] => -57.2\n [idstatusoccurrence] => 17\n )\n\n [137] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -4.9902777\n [lon] => -7.9041667\n [idstatusoccurrence] => 17\n )\n\n [138] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -20.7\n [lon] => -42.0666667\n [idstatusoccurrence] => 17\n )\n\n [139] => stdClass Object\n (\n [taxon] => Eugenia florida DC.\n [lat] => -14.6833333\n [lon] => -67.3333333\n [idstatusoccurrence] => 17\n )\n\n )\n\n [raster] => Array\n (\n )\n\n [algorithm] => Array\n (\n [0] => stdClass Object\n (\n [algorithm] => Maxent\n [idalgorithm] => 2\n )\n\n [1] => stdClass Object\n (\n [algorithm] => Bioclim\n [idalgorithm] => 5\n )\n\n )\n\n )\n\n)\n{"experiment":[{"id":"bd4c9ab730f5513206b999ec0d90d1fb","op": "I","msg": "Adicionado com sucesso"}]}'
Pela interface web, vejo que os dados aparecem inseridos em "Dados Resultados". Parece que é só tirar essas informações extras que estão vindo na resposta mesmo.
Guilherme,
Fiz uns ajustes aqui. Pode confirmar se está tudo certo, por favor ?
Assim como temos um método no webservice para mudarmos o status de um experimento (de Liberado para Em processamento por exemplo), sugiro criarmos um para informarmos os resultados de um experimento.
Ele pode receber as informaçes via HTTP POST:
Processar os dados de uma requisição POST não é complicado no PHP se me recordo corretamente. Só não saberia exatamente se é o melhor método HTTP para fazermos isso (semanticamente falando).
Estão faltando vários campos acima e
raster_path
poderia ser relativo. Estou passando um exemplo absoluto só para expor a ideia.