(function (window, document, $) {
'use strict';
if (window.SIGVisorGis) { return; }
var api = window.SIGVisorGis = {};
var googlePromise = null;
function esc(value) {
return $('
').text(value == null ? '' : String(value)).html();
}
function layerOf(feature) {
var p = feature && feature.properties || {};
return $.trim(String(p._sigCapa || p.Capa || p.capa || 'GIS')) || 'GIS';
}
function isSupported(g) {
return g && $.inArray(g.type, [
'Point', 'MultiPoint', 'LineString', 'MultiLineString', 'Polygon', 'MultiPolygon'
]) >= 0;
}
function loadGoogle(key) {
if (window.google && window.google.maps && window.google.maps.Data) {
return $.Deferred().resolve().promise();
}
if (googlePromise) { return googlePromise; }
var d = $.Deferred();
googlePromise = d.promise();
var callback = '__sigVisorGisMapsReady';
window[callback] = function () {
d.resolve();
try { delete window[callback]; } catch (_) { window[callback] = null; }
};
var s = document.createElement('script');
s.async = true;
s.defer = true;
s.src = 'https://maps.googleapis.com/maps/api/js?key=' + encodeURIComponent(key) + '&callback=' + callback;
var temporizador = window.setTimeout(function () {
googlePromise = null;
d.reject();
}, 30000);
d.always(function () {
window.clearTimeout(temporizador);
});
s.onerror = function () {
googlePromise = null;
d.reject();
};
document.head.appendChild(s);
return googlePromise;
}
function boundsOf(geo) {
var b = null;
function visit(v) {
if (!$.isArray(v)) { return; }
if (v.length >= 2 && typeof v[0] === 'number' && typeof v[1] === 'number') {
if (!b) { b = { minX:v[0], maxX:v[0], minY:v[1], maxY:v[1] }; }
else {
b.minX=Math.min(b.minX,v[0]); b.maxX=Math.max(b.maxX,v[0]);
b.minY=Math.min(b.minY,v[1]); b.maxY=Math.max(b.maxY,v[1]);
}
return;
}
$.each(v, function (_, x) { visit(x); });
}
$.each(geo.features || [], function (_, f) { if (isSupported(f.geometry)) { visit(f.geometry.coordinates); } });
return b;
}
function pathForLine(coords, project, close) {
if (!coords || !coords.length) { return ''; }
var p = project(coords[0]), r = ['M'+p[0]+','+p[1]];
for (var i=1;i 700 ? 310 : 35
});
}
function actualizarDibujo(estado, recalcularEncuadre) {
if (estado.dataLayer) {
applyGoogleStyle(estado);
if (recalcularEncuadre) {
encuadrarGoogle(estado);
}
} else {
renderSvg(estado);
}
}
function guardarCapa(estado, capa, fila) {
var aviso = fila.find('[data-gis-estado-capa]');
fila.find('input, select, button').prop('disabled', true);
aviso.text('Guardando...');
$.ajax({
url: estado.$root.attr('data-gis-url'),
type: 'POST',
dataType: 'json',
timeout: 30000,
data: {
metodo: 'GuardarCapa',
CveFraccionamientoEtapa: estado.$root.attr('data-gis-stage'),
NombreCapa: capa.NombreCapa,
TipoCapa: capa.TipoCapa,
Color: capa.Color,
EsVisible: capa.EsVisible
}
}).done(function (respuesta) {
aviso.text(respuesta.success ? 'Guardado' : 'No se guardó. Pulse Reintentar.');
fila.find('[data-gis-reintentar]').toggle(!respuesta.success);
}).fail(function () {
aviso.text('No se guardó. El cambio sólo se muestra en esta vista.');
fila.find('[data-gis-reintentar]').show();
}).always(function () {
fila.find('input, select, button').prop('disabled', false);
});
}
function renderLayers(estado) {
var contenedor = estado.$root.find('[data-gis-layers]').empty();
var boton = estado.$root.find('[data-gis-alternar-capas]');
var panel = estado.$root.find('[data-gis-panel-capas]');
panel.attr('id', 'gis-panel-' + estado.uid);
boton.attr('aria-controls', panel.attr('id'));
if (!boton.is('[data-sig-menu-capas-inicializado]')) {
boton.on('click.sigVisor', function () {
var abierto = boton.attr('aria-expanded') !== 'true';
panel.toggle(abierto);
boton.attr('aria-expanded', String(abierto));
});
boton.attr('data-sig-menu-capas-inicializado', '1');
}
$.each(estado.layers, function (indice, nombre) {
var capa = estado.capas[nombre];
var fila = $('').appendTo(contenedor);
var etiqueta = $('').appendTo(fila);
var casilla = $('').prop('checked', capa.EsVisible).appendTo(etiqueta);
$('').text(nombre).appendTo(etiqueta);
$('').text(estado.layerCounts[nombre]).appendTo(etiqueta);
var geometria = capa.Geometria || '';
var descripcion = geometria.indexOf('Polygon') >= 0 ? 'Polígonos' :
geometria.indexOf('LineString') >= 0 ? 'Líneas' :
geometria.indexOf('Point') >= 0 ? 'Puntos' : 'Geometría mixta';
$('').text(descripcion).appendTo(fila);
var opciones = $('').appendTo(fila);
var selector = $('')
.attr('aria-label', 'Tipo de ' + nombre).appendTo(opciones);
$.each({ Agua: 'Línea de agua', Drenaje: 'Línea de drenaje',
Lotificacion: 'Lotificación', Pozos: 'Pozos', Otros: 'Otros' }, function (valor, texto) {
$('').val(valor).text(texto).appendTo(selector);
});
selector.val(capa.TipoCapa);
var color = $('').val(capa.Color)
.attr('aria-label', 'Color de ' + nombre).appendTo(opciones);
$('').appendTo(fila);
var reintentar = $('')
.hide().appendTo(fila);
fila.find('input, select').on('change.sigVisor', function () {
var recalcularEncuadre = capa.EsVisible !== casilla.prop('checked') ||
capa.TipoCapa !== selector.val();
capa.EsVisible = casilla.prop('checked');
capa.TipoCapa = selector.val();
capa.Color = color.val();
estado.visible[nombre] = capa.EsVisible;
actualizarDibujo(estado, recalcularEncuadre);
guardarCapa(estado, capa, fila);
});
reintentar.on('click.sigVisor', function () {
guardarCapa(estado, capa, fila);
});
fila.attr('data-sig-capa-inicializada', '1');
});
}
function claveFigura(figura) {
return figura && figura.id != null && $.trim(String(figura.id)) !== ''
? 'id:' + $.trim(String(figura.id)) : '';
}
function nombreLote(lote) {
return lote.Nombre || ('Lote ' + (lote.Numero || lote.CveFraccionamientoLote));
}
function loteVinculado(estado, clave) {
return $.grep(estado.lotes || [], function (lote) {
return lote.GISPoligonoClave === clave;
})[0];
}
function mostrarFichaLote(contenedor, lote) {
contenedor.empty();
var ficha = $('
').appendTo(contenedor);
$.each([
['Lote', nombreLote(lote)], ['Etapa', lote.Etapa], ['Tipo', lote.Tipo],
['Calle', lote.Calle], ['Catastro', lote.Catastro],
['Superficie', lote.MetrosCuadrados == null ? 'Sin registrar' :
Number(lote.MetrosCuadrados).toLocaleString('es-MX') + ' m²']
], function (indice, dato) {
$('').text(dato[0]).appendTo(ficha);
$('').text(dato[1] || 'Sin registrar')
.toggleClass('sig-visor-gis__superficie-lote', dato[0] === 'Superficie').appendTo(ficha);
});
}
function cargarLotes(estado) {
return $.ajax({
url: estado.$root.attr('data-gis-url'),
dataType: 'json',
cache: false,
timeout: 30000,
data: {
metodo: 'Context',
CveFraccionamientoEtapa: estado.$root.attr('data-gis-stage')
}
}).then(function (respuesta) {
if (!respuesta.success || !respuesta.data || !$.isArray(respuesta.data.Lotes)) {
return $.Deferred().reject().promise();
}
return respuesta;
});
}
function abrirLote(estado, figura) {
var clave = claveFigura(figura);
var modal = estado.$root.find('[data-gis-modal-lote]');
var mensaje = modal.find('[data-gis-mensaje-lote]');
estado.consultaLotesActual = (estado.consultaLotesActual || 0) + 1;
var consultaActual = estado.consultaLotesActual;
if (!modal.is('[data-sig-consulta-lotes-inicializada]')) {
modal.on('hide.bs.modal.sigVisorLotes', function () {
estado.consultaLotesActual++;
});
modal.attr('data-sig-consulta-lotes-inicializada', '1');
}
estado.figuraSeleccionada = figura;
estado.claveSeleccionada = clave;
actualizarDibujo(estado);
modal.find('[data-gis-clave-lote]').text('Polígono: ' + clave);
modal.find('[data-gis-datos-lote]').empty();
modal.find('[data-gis-seleccion-lote], [data-gis-vincular-lote]').hide();
mensaje.text('Consultando lotes de la etapa...');
if (document.fullscreenElement && document.exitFullscreen) {
document.exitFullscreen().catch(function () {});
}
var usaPanel = estado.$root.is('[data-sig-lotes-mapa-inicializado]');
if (usaPanel) {
estado.$root.find('[data-gis-info]').text('Consultando lote...').show();
} else {
modal.modal('show');
}
cargarLotes(estado).done(function (respuesta) {
if (estado.consultaLotesActual !== consultaActual || estado.claveSeleccionada !== clave ||
!$.contains(document, estado.$root[0])) {
return;
}
estado.lotes = respuesta.data.Lotes;
var lote = loteVinculado(estado, clave);
modal.find('[data-gis-titulo-lote]').text(lote ? nombreLote(lote) : 'Vincular polígono con lote');
mensaje.text('');
if (lote) {
mostrarVinculo(estado, figura, lote);
if (usaPanel) {
estado.$root.trigger('sig:loteSeleccionado', [lote]);
} else {
mostrarFichaLote(modal.find('[data-gis-datos-lote]'), lote);
}
return;
}
estado.$root.find('[data-gis-info]').text('Polígono sin lote vinculado.');
modal.modal('show');
var selector = modal.find('[data-gis-selector-lote]').empty();
$('').val('').text('Seleccione un lote').appendTo(selector);
$.each(estado.lotes, function (indice, disponible) {
if (disponible.EsActivo && !disponible.GISPoligonoClave) {
$('').val(disponible.CveFraccionamientoLote)
.text(nombreLote(disponible)).appendTo(selector);
}
});
modal.find('[data-gis-seleccion-lote], [data-gis-vincular-lote]').show();
if (selector.find('option').length === 1) {
mensaje.text('No hay lotes activos disponibles en esta etapa.');
}
}).fail(function () {
if (estado.consultaLotesActual !== consultaActual || estado.claveSeleccionada !== clave ||
!$.contains(document, estado.$root[0])) {
return;
}
mensaje.text('No fue posible consultar los lotes. Cierre y vuelva a seleccionar el polígono.');
estado.$root.find('[data-gis-info]').text(mensaje.text()).show();
});
var boton = modal.find('[data-gis-vincular-lote]');
if (!boton.is('[data-sig-vincular-lote-inicializado]')) {
boton.on('click.sigVisorLote', function () {
var lote = parseInt(modal.find('[data-gis-selector-lote]').val(), 10) || 0;
if (!lote) {
mensaje.text('Seleccione un lote disponible.');
return;
}
var figuraActual = estado.figuraSeleccionada;
modal.find('button, select').prop('disabled', true);
mensaje.text('Guardando vínculo...');
$.ajax({
url: estado.$root.attr('data-gis-url'),
type: 'POST',
dataType: 'json',
timeout: 30000,
data: {
metodo: 'VincularLote',
CveFraccionamientoEtapa: estado.$root.attr('data-gis-stage'),
CveFraccionamientoLote: lote,
ClavePoligono: claveFigura(figuraActual)
}
}).done(function (respuesta) {
if (!respuesta.success) {
mensaje.text(respuesta.message || 'No fue posible vincular el lote.');
return;
}
var vinculado = $.grep(estado.lotes, function (elemento) {
return elemento.CveFraccionamientoLote === lote;
})[0];
vinculado.GISPoligonoClave = claveFigura(figuraActual);
mostrarVinculo(estado, figuraActual, vinculado);
mostrarFichaLote(modal.find('[data-gis-datos-lote]'), vinculado);
modal.find('[data-gis-seleccion-lote], [data-gis-vincular-lote]').hide();
mensaje.text('Lote vinculado correctamente.');
actualizarDibujo(estado);
if (estado.$root.is('[data-sig-lotes-mapa-inicializado]')) {
modal.modal('hide');
estado.$root.trigger('sig:loteSeleccionado', [vinculado]);
}
}).fail(function (respuesta) {
mensaje.text(respuesta.responseJSON && respuesta.responseJSON.message ||
'No se pudo confirmar el guardado. Cierre y vuelva a seleccionar el polígono.');
}).always(function () {
modal.find('button, select').prop('disabled', false);
});
});
boton.attr('data-sig-vincular-lote-inicializado', '1');
}
}
function mostrarVinculo(estado, figura, lote) {
var informacion = estado.$root.find('[data-gis-info]').empty().show();
$('').text(layerOf(figura)).appendTo(informacion);
$('
').appendTo(informacion);
$('')
.text(nombreLote(lote)).on('click.sigVisorLote', function () {
abrirLote(estado, figura);
}).appendTo(informacion);
}
function featureInfo(estado, figura) {
var propiedades = figura.properties || {};
var informacion = estado.$root.find('[data-gis-info]').empty().show();
$('').text(layerOf(figura)).appendTo(informacion);
var capa = estado.capas[layerOf(figura)];
var tipo = figura.geometry && figura.geometry.type;
estado.claveSeleccionada = claveFigura(figura);
actualizarDibujo(estado);
if (capa && capa.TipoCapa === 'Lotificacion' &&
(tipo === 'Polygon' || tipo === 'MultiPolygon')) {
if (!estado.claveSeleccionada || estado.claveSeleccionada.length > 100) {
$('').text('Este polígono necesita una clave GIS válida y única.').appendTo(informacion);
return;
}
abrirLote(estado, figura);
return;
}
$.each(propiedades, function (nombre, valor) {
if (nombre.indexOf('_sig') !== 0 && valor != null && valor !== '') {
$('').text(nombre + ': ' + valor).appendTo(informacion);
}
});
}
function applyGoogleStyle(state) {
state.dataLayer.setStyle(function (f) {
var layer = String(f.getProperty('_sigCapa') || 'GIS');
var type = f.getGeometry() && f.getGeometry().getType();
var visible = state.visible[layer] !== false;
var color = state.capas[layer] ? state.capas[layer].Color : '#1976D2';
var seleccionado = state.claveSeleccionada && state.claveSeleccionada === 'id:' + String(f.getId()).trim();
return {
visible: visible,
clickable: visible,
fillOpacity: type === 'Polygon' || type === 'MultiPolygon' ? 0.22 : 0,
strokeWeight: seleccionado ? 5 : (type === 'LineString' || type === 'MultiLineString' ? 3 : 2),
strokeColor: seleccionado ? '#FF8F00' : color,
fillColor: color,
icon: {
path: google.maps.SymbolPath.CIRCLE,
scale: 5,
fillColor: color,
fillOpacity: 1,
strokeColor: '#FFFFFF',
strokeWeight: 1
}
};
});
}
function renderGoogle(state) {
var el = state.$root.find('[data-gis-map]')[0];
$(el).empty();
state.map = new google.maps.Map(el, {
center: { lat: 29.072967, lng: -110.955919 },
zoom: 16,
maxZoom: 21,
zoomControl: true,
zoomControlOptions: { position: google.maps.ControlPosition.LEFT_BOTTOM },
mapTypeId: 'roadmap'
});
var controlCapas = state.$root.find('[data-gis-control-capas]')[0];
controlCapas.style.position = 'relative';
controlCapas.style.top = '0';
controlCapas.style.right = '0';
controlCapas.style.margin = '10px';
state.map.controls[google.maps.ControlPosition.RIGHT_TOP].push(controlCapas);
state.dataLayer = new google.maps.Data({map:state.map});
state.dataLayer.addGeoJson(state.geo);
applyGoogleStyle(state);
state.dataLayer.addListener('click', function(e){
var props={}; e.feature.forEachProperty(function(v,k){props[k]=v;});
featureInfo(state, { id: e.feature.getId(), properties: props,
geometry: { type: e.feature.getGeometry().getType() } });
});
encuadrarGoogle(state);
}
function renderSvg(state) {
state.dataLayer = null;
var controlCapas = state.$root.find('[data-gis-control-capas]');
controlCapas.appendTo(state.$root.find('.sig-visor-gis__contenedor'));
controlCapas.css({ position: '', top: '', right: '', margin: '' });
var $map=state.$root.find('[data-gis-map]').empty(), el=$map[0];
var b = limitesEncuadre(state) || state.ultimoEncuadre;
state.ultimoEncuadre = b;
if(!b){$map.html('El GIS no contiene geometrías visibles.
');return;}
var w=Math.max($map.width()||800,300), h=Math.max($map.height()||430,300), m=18;
var rx=b.maxX-b.minX||1, ry=b.maxY-b.minY||1, scale=Math.min((w-m*2)/rx,(h-m*2)/ry);
var ox=(w-rx*scale)/2, oy=(h-ry*scale)/2;
function project(p){return [ox+(p[0]-b.minX)*scale,h-(oy+(p[1]-b.minY)*scale)];}
var svg=document.createElementNS('http://www.w3.org/2000/svg','svg');
svg.setAttribute('viewBox','0 0 '+w+' '+h); svg.setAttribute('class','sig-visor-gis__svg');
$.each(state.geo.features||[],function(_,f){
if(!isSupported(f.geometry) || state.visible[layerOf(f)]===false){return;}
var type=f.geometry.type, node;
var colorCapa = state.capas[layerOf(f)].Color;
if(type==='Point'||type==='MultiPoint'){
var pts=type==='Point'?[f.geometry.coordinates]:f.geometry.coordinates;
$.each(pts,function(_,pt){var q=project(pt);node=document.createElementNS('http://www.w3.org/2000/svg','circle');node.setAttribute('cx',q[0]);node.setAttribute('cy',q[1]);node.setAttribute('r','4');node.setAttribute('class','sig-visor-gis__point');node.style.fill=colorCapa;node.addEventListener('click',function(){featureInfo(state,f);});svg.appendChild(node);});
} else {
var d=pathsFor(f.geometry,project); if(!d){return;}
node=document.createElementNS('http://www.w3.org/2000/svg','path');node.setAttribute('d',d);
node.setAttribute('class',(type.indexOf('Polygon')>=0?'sig-visor-gis__polygon':'sig-visor-gis__line'));
node.style.stroke = state.claveSeleccionada === claveFigura(f) ? '#FF8F00' : colorCapa;
node.style.strokeWidth = state.claveSeleccionada === claveFigura(f) ? '5' : '2';
if (type.indexOf('Polygon') >= 0) {
node.style.fill = colorCapa;
node.style.fillOpacity = '0.22';
}
node.setAttribute('fill-rule','evenodd'); node.addEventListener('click',function(){featureInfo(state,f);}); svg.appendChild(node);
}
});
el.appendChild(svg);
$('Vista GIS · Active Google Maps en configuración para usar mapa base.
').appendTo($map);
}
function init(raiz) {
var elemento = $(raiz);
if (elemento.attr('data-sig-visor-gis-inicializado') === '1' ||
elemento.attr('data-sig-visor-gis-cargando') === '1') {
return;
}
var etapa = parseInt(elemento.attr('data-gis-stage'), 10) || 0;
var direccion = elemento.attr('data-gis-url');
if (!etapa || !direccion) {
return;
}
var estado = {
$root: elemento,
uid: Math.random().toString(36).slice(2),
geo: null,
layers: [],
layerCounts: Object.create(null),
visible: Object.create(null),
capas: Object.create(null),
dataLayer: null
};
elemento.data('sigVisorGis', estado);
elemento.find('[data-gis-file]').text(elemento.attr('data-gis-file-name') || '');
elemento.attr('data-sig-visor-gis-cargando', '1');
function terminar() {
elemento.attr('data-sig-visor-gis-inicializado', '1');
elemento.removeAttr('data-sig-visor-gis-cargando');
}
function mostrarError(mensaje) {
elemento.removeAttr('data-sig-visor-gis-cargando');
elemento.find('[data-gis-map]').empty().append(
$('').text(mensaje));
}
function mostrarAlternativa() {
if (!$.contains(document, elemento[0])) {
return;
}
try {
renderSvg(estado);
terminar();
} catch (error) {
mostrarError('No fue posible dibujar el GIS de la etapa.');
}
}
$.ajax({
url: direccion,
type: 'GET',
dataType: 'text',
cache: false,
timeout: 30000,
data: {
metodo: 'File',
CveFraccionamientoEtapa: etapa
}
}).done(function (texto) {
if (!$.contains(document, elemento[0])) {
return;
}
try {
var geometria = JSON.parse(String(texto || '').replace(/^\uFEFF/, ''));
if (!geometria || geometria.type !== 'FeatureCollection' ||
!$.isArray(geometria.features)) {
throw new Error();
}
geometria.features = $.grep(geometria.features, function (figura) {
return figura && isSupported(figura.geometry);
});
if (!geometria.features.length) {
throw new Error();
}
estado.geo = geometria;
var colores = ['#1976D2', '#D84315', '#388E3C', '#8E24AA', '#00838F',
'#C2185B', '#827717', '#5D4037', '#455A64', '#F9A825'];
$.each(geometria.features, function (indice, figura) {
var capa = layerOf(figura);
figura.properties = figura.properties || {};
figura.properties._sigCapa = capa;
if (!estado.layerCounts[capa]) {
var nombre = capa.toLowerCase();
estado.capas[capa] = {
NombreCapa: capa,
TipoCapa: nombre.indexOf('lotific') >= 0 ? 'Lotificacion' :
nombre.indexOf('pozo') >= 0 ? 'Pozos' :
nombre.indexOf('drenaje') >= 0 ? 'Drenaje' :
nombre.indexOf('agua') >= 0 ? 'Agua' : 'Otros',
Color: colores[estado.layers.length % colores.length],
EsVisible: true,
Geometria: figura.geometry.type
};
estado.layers.push(capa);
estado.layerCounts[capa] = 0;
estado.visible[capa] = true;
} else if (estado.capas[capa].Geometria !== figura.geometry.type) {
estado.capas[capa].Geometria = 'Mixta';
}
estado.layerCounts[capa]++;
});
$.ajax({
url: direccion,
type: 'GET',
dataType: 'json',
cache: false,
timeout: 30000,
data: { metodo: 'Capas', CveFraccionamientoEtapa: etapa }
}).done(function (respuesta) {
if (!respuesta.success || !$.isArray(respuesta.data)) {
elemento.find('[data-gis-estado-capas]').text('No se pudo leer la configuración guardada.');
return;
}
$.each(respuesta.data, function (indice, capa) {
if (estado.capas[capa.NombreCapa]) {
estado.capas[capa.NombreCapa] = capa;
estado.visible[capa.NombreCapa] = capa.EsVisible;
}
});
}).fail(function () {
elemento.find('[data-gis-estado-capas]').text(
'No se pudo leer la configuración guardada. Se muestran valores iniciales.');
}).always(function () {
if (!$.contains(document, elemento[0])) {
return;
}
renderLayers(estado);
var habilitado = elemento.attr('data-gis-google-enabled') === '1';
var clave = elemento.attr('data-gis-google-key') || '';
if (habilitado && clave) {
loadGoogle(clave).done(function () {
if (!$.contains(document, elemento[0])) {
return;
}
try {
renderGoogle(estado);
terminar();
} catch (error) {
mostrarAlternativa();
}
}).fail(mostrarAlternativa);
} else {
mostrarAlternativa();
}
});
} catch (error) {
mostrarError('El archivo GIS guardado no tiene un formato compatible.');
}
}).fail(function () {
mostrarError('No fue posible cargar el GIS de la etapa.');
});
}
api.redimensionar = function (raiz) {
var estado = $(raiz).data('sigVisorGis');
if (!estado || !estado.geo) {
return;
}
if (estado.map) {
var centro = estado.map.getCenter();
var zoom = estado.map.getZoom();
google.maps.event.trigger(estado.map, 'resize');
if (centro) {
estado.map.setCenter(centro);
}
if (zoom != null) {
estado.map.setZoom(zoom);
}
} else if (estado.$root.is('[data-sig-visor-gis-inicializado]')) {
renderSvg(estado);
}
};
api.limpiarSeleccion = function (raiz, claveLote) {
var estado = $(raiz).data('sigVisorGis');
if (!estado) {
return;
}
var seleccionAfectada = false;
$.each(estado.lotes || [], function (indice, lote) {
if (String(lote.CveFraccionamientoLote) === String(claveLote)) {
seleccionAfectada = estado.claveSeleccionada === lote.GISPoligonoClave;
lote.GISPoligonoClave = '';
}
});
if (seleccionAfectada) {
estado.claveSeleccionada = null;
estado.$root.find('[data-gis-info]').empty();
}
actualizarDibujo(estado);
};
api.verLote = function (raiz, claveLote) {
var estado = $(raiz).data('sigVisorGis');
if (!estado || !estado.geo) {
return;
}
estado.consultaLotesActual = (estado.consultaLotesActual || 0) + 1;
var consulta = estado.consultaLotesActual;
var informacion = estado.$root.find('[data-gis-info]').text('Consultando lote...').show();
cargarLotes(estado).done(function (respuesta) {
if (consulta !== estado.consultaLotesActual || !$.contains(document, estado.$root[0])) {
return;
}
estado.lotes = respuesta.data.Lotes;
var lote = $.grep(estado.lotes, function (elemento) {
return String(elemento.CveFraccionamientoLote) === String(claveLote) && elemento.EsActivo;
})[0];
var figura = lote && $.grep(estado.geo.features, function (elemento) {
return claveFigura(elemento) === lote.GISPoligonoClave;
})[0];
if (!figura) {
informacion.text('Este lote no tiene un polígono vinculado en el archivo actual. Seleccione un polígono libre para vincularlo.');
estado.$root[0].scrollIntoView({ block: 'center' });
return;
}
var capa = layerOf(figura);
estado.visible[capa] = true;
estado.capas[capa].EsVisible = true;
renderLayers(estado);
estado.claveSeleccionada = claveFigura(figura);
estado.figuraSeleccionada = figura;
actualizarDibujo(estado);
mostrarVinculo(estado, figura, lote);
estado.$root.trigger('sig:loteSeleccionado', [lote]);
if (estado.map) {
var limites = boundsOf({ features: [figura] });
if (limites) {
estado.map.fitBounds(new google.maps.LatLngBounds(
{ lat: limites.minY, lng: limites.minX },
{ lat: limites.maxY, lng: limites.maxX }), 70);
}
}
}).fail(function () {
if (consulta === estado.consultaLotesActual) {
informacion.text('No fue posible consultar el vínculo del lote. Inténtelo nuevamente.');
}
});
};
function scan() {
if (window.SIGLotesEtapa) {
window.SIGLotesEtapa.restaurarMapas();
}
$('.sig-visor-gis[data-gis-stage]').each(function () {
init(this);
});
}
api.init=scan;
api.ensureGoogleMaps=loadGoogle;
$(scan);
if(window.Sys&&Sys.WebForms&&Sys.WebForms.PageRequestManager){
try{Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(){scan();});}catch(_){ }
}
})(window, document, window.jQuery);