Fotos: Eduardo Santinon
A Prefeitura de Sorocaba, por meio da Secretaria de Mobilidade (Semob), iniciou os trabalhos de implantação do sistema de “Muralha Eletrônica”, voltado ao videomonitoramento de veículos quem entram e saem da cidade, pelos principais corredores viários. Ao todo está prevista a instalação de câmeras em 34 pontos do município, gradativamente, nos próximos meses.
Em um primeiro momento, seis câmeras foram instaladas na principal entrada da cidade, nas alças de acesso entre a Avenida Dom Aguirre e a Rodovia José Ermírio de Moraes (SP-075), a Castelinho.
Os dispositivos estão equipados com software de Leitor Automático de Placas (LAP), que permite o registro de cada veículo que passa pela via, a identificação da placa e checagem automática em banco de dados, alertando se o veículo possui alguma irregularidade administrativa ou criminal.
A operacionalização da “Muralha Eletrônica” é de responsabilidade de empresa contratada pela Semob e que já executa os serviços de radares na cidade, inclusive com leitura automática de placas em pontos dentro do município. As imagens de alta definição e informações sobre cada veículo são acessadas pela equipe do Centro de Controle Operacional (CCOI) da Semob.
Segundo essa Secretaria, a “Muralha Eletrônica” vai compor e ampliar a rede de videomonitoramento na cidade, sendo possível acompanhar todo o trajeto de um carro suspeito, desde o momento em que ele entra na cidade. A partir disso, é possível fazer a abordagem do veículo pelos agentes da Semob, Guarda Civil Municipal (GCM) ou Polícia Militar (PM).
Esse projeto vem sendo adequado de acordo com as diretrizes do conceito de Smart Cities. Aliás, a PM também terá acesso, em tempo real, a todas as imagens geradas pelo novo sistema, em sua central de controle que opera no 7º Batalhão.
Em um segundo momento do projeto, a Semob prevê também a instalação de “Muralha Eletrônica” em pontos estratégicos nos bairros, como Parque São Bento, Santa Rosália e Wanel Ville, por exemplo, para otimizar ainda mais o sistema e ampliar a segurança.
$$ = $.noConflict();
var initPhotoSwipeFromDOM = function(gallerySelector) {
		// parse slide data (url, title, size …) from DOM elements
		// (children of gallerySelector)
		var parseThumbnailElements = function(el) {
			var thumbElements = el.childNodes,
				numNodes = thumbElements.length,
				items = [],
				figureEl,
				childElements,
				linkEl,
				size,
				item;
			for(var i = 0; i < numNodes; i++) {
				figureEl = thumbElements[i]; // 
				// include only element nodes
				if(figureEl.nodeType !== 1) {
					continue;
				}
				linkEl = figureEl.children[0]; //  element
				linkEl = figureEl; //  element
				// console.log(linkEl);
				size = linkEl.getAttribute(‘data-size’).split(‘x’);
				// create slide object
				item = {
					src: linkEl.getAttribute(‘href’),
					w: parseInt(size[0], 10),
					h: parseInt(size[1], 10)
				};
				if(figureEl.children.length > 1) {
					//
					item.title = figureEl.children[1].innerHTML;
				}
				if(linkEl.children.length > 0) {
					//  thumbnail element, retrieving thumbnail url
					item.msrc = linkEl.children[0].getAttribute(‘src’);
				} 
				item.el = figureEl; // save link to element for getThumbBoundsFn
				items.push(item);
			}
			return items;
		};
		// find nearest parent element
		var closest = function closest(el, fn) {
			return el && ( fn(el) ? el : closest(el.parentNode, fn) );
		};
		// triggers when user clicks on thumbnail
		var onThumbnailsClick = function(e) {
			e = e || window.event;
			e.preventDefault ? e.preventDefault() : e.returnValue = false;
var eTarget = e.target || e.srcElement;
			var clickedListItem = closest(eTarget, function(el) {
				return el.tagName === ‘FIGURE’;
			});
			clickedListItem = eTarget.parentNode;
			if(!clickedListItem) {
				return;
			}
			// find index of clicked item
			var clickedGallery = clickedListItem.parentNode,
				childNodes = clickedListItem.parentNode.childNodes,
				numChildNodes = childNodes.length,
				nodeIndex = 0,
				index;
			for (var i = 0; i = 0) {
				openPhotoSwipe( index, clickedGallery );
			}
			return false;
		};
		// parse picture index and gallery index from URL (#&pid=1&gid=2)
		var photoswipeParseHash = function() {
			var hash = window.location.hash.substring(1),
				params = {};
			if(hash.length < 5) {
				return params;
			}
			var vars = hash.split('&');
			for (var i = 0; i < vars.length; i++) {
				if(!vars[i]) {
					continue;
				}
				var pair = vars[i].split('=');
				if(pair.length  getThumbBoundsFn section of docs for more info
					var thumbnail = items[index].el.getElementsByTagName(‘img’)[0], // find thumbnail
						pageYScroll = window.pageYOffset || document.documentElement.scrollTop,
						rect = thumbnail.getBoundingClientRect(); 
					return {x:rect.left, y:rect.top + pageYScroll, w:rect.width};
				},
				shareButtons: [
					{id:’download’, label:’Download image’, url:”, download:true}
				],
				// history & focus options are disabled on CodePen
				// remove these lines in real life:
				historyEnabled: false,
				focus: false 
};
			if(disableAnimation) {
				options.showAnimationDuration = 0;
			}
			// Pass data to PhotoSwipe and initialize it
			gallery = new PhotoSwipe( pswpElement, PhotoSwipeUI_Default, items, options);
			gallery.init();
		};
		// loop through all gallery elements and bind events
		var galleryElements = document.querySelectorAll( gallerySelector );
		for(var i = 0, l = galleryElements.length; i  0 && hashData.gid > 0) {
			openPhotoSwipe( hashData.pid – 1 ,  galleryElements[ hashData.gid – 1 ], true );
		}
	};
	// execute above function
	initPhotoSwipeFromDOM(‘.pms-galeria’);
	// All images need to be loaded for this plugin to work so
	// we end up waiting for the whole window to load in this example
	$$(window).load(function () {
		$$(document).ready(function(){
			collage();
			$$(‘.pms-galeria’).collageCaption();
		});
	});
	// Here we apply the actual CollagePlus plugin
	function collage() {
		$$(‘.pms-galeria img’).css(‘display’, ‘block’);
		$$(‘.pms-galeria’).removeWhitespace().collagePlus({
			‘fadeSpeed’     : 2000,
			‘targetHeight’  : 150,
			‘effect’        : ‘default’,
			‘direction’     : ‘vertical’,
			‘allowPartialLastRow’ : true
		});
	};
	// This is just for the case that the browser window is resized
	var resizeTimer = null;
	$$(window).bind(‘resize’, function() {
		// hide all the images until we resize them
		$$(‘.pms-galeria .Image_Wrapper’).css(“opacity”, 0);
		// set a timer to re-apply the plugin
		if (resizeTimer) clearTimeout(resizeTimer);
		resizeTimer = setTimeout(collage, 200);
	});