Skip to content

Instantly share code, notes, and snippets.

@gledsoncruz
Created January 26, 2021 12:14
Show Gist options
  • Save gledsoncruz/8da05391a9de6e3424c985993cf9253e to your computer and use it in GitHub Desktop.
Save gledsoncruz/8da05391a9de6e3424c985993cf9253e to your computer and use it in GitHub Desktop.
def update
if logradouro_params[:options_update] == 1.to_s #alterar somente trecho no loteamento
wkt_intersection = @logradouro.intersection(logradouro_params[:loteamento_wkt])
wkt_difference = @logradouro.difference(logradouro_params[:loteamento_wkt])
@logradouro.the_geom = wkt_intersection
logr = Logradouro.new(tipo_pavimento: @logradouro.tipo_pavimento_was, classificacao_viaria: @logradouro.classificacao_viaria_was, nome: @logradouro.nome_was, decreto: @logradouro.decreto_was, tipo_logradouro_id: @logradouro.tipo_logradouro_id_was, the_geom: wkt_difference)
logr.save
logradouros_antigos = @logradouro.logradouro_antigos
logradouros_antigos.each do |la|
lograd_antigo = LogradouroAntigo.new(tipo_pavimento: la.tipo_pavimento, classificacao_viaria: la.classificacao_viaria, tipo_logradouro: la.tipo_logradouro, nome: la.nome, decreto: la.decreto, logradouro_id: logr.id)
lograd_antigo.save
end
elsif logradouro_params[:options_update] == 2.to_s
wkt_intersection = @logradouro.intersection(logradouro_params[:bairro_wkt])
wkt_difference = @logradouro.difference(logradouro_params[:bairro_wkt])
@logradouro.the_geom = wkt_intersection
logr = Logradouro.new(tipo_pavimento: @logradouro.tipo_pavimento_was, classificacao_viaria: @logradouro.classificacao_viaria_was, nome: @logradouro.nome_was, decreto: @logradouro.decreto_was, tipo_logradouro_id: @logradouro.tipo_logradouro_id_was, the_geom: wkt_difference)
logr.save
logradouros_antigos = @logradouro.logradouro_antigos
logradouros_antigos.each do |la|
lograd_antigo = LogradouroAntigo.new(tipo_pavimento: la.tipo_pavimento, classificacao_viaria: la.classificacao_viaria, tipo_logradouro: la.tipo_logradouro, nome: la.nome, decreto: la.decreto, logradouro_id: logr.id)
lograd_antigo.save
end
end
respond_to do |format|
if @logradouro.update(logradouro_params)
format.html { redirect_to @logradouro, notice: 'Logradouro alterado com sucesso.' }
format.json { render :show, status: :ok, location: @logradouro }
else
format.html { render :edit }
format.json { render json: @logradouro.errors, status: :unprocessable_entity }
end
end
end
@gledsoncruz
Copy link
Author

Nesse código eu precisava alterar um logradouro, mas precisava também guardar o histórico em uma outra tabela.
O desafio maior é que a tabela era espacial, então alem de alterar o nome do logradouro e seus dados "tabulares", eu precisava alterar o traçado, pois muitas vezes você tinha um logradouro que passava por diversos bairros ou diversos loteamentos, e as vezes o nome do logradouro era alterado somente em algum trecho dentro de um loteamento ou bairro. Toda a inteligência de alterar o traçado tinha que ficar escondida pro usuário, o usuário iria apenas se preocupar em apontar se o logradouro seria alterado em todo o traçado, somente dentro de um bairro ou somente dentro de um loteamento, e o programa fazia toda a rotina por trás.

Essas alterações eram vistas pela equipe de geoprocessamento quando abriam a tabela espacial em um programa GIS.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment