Commit 9862342b authored by Pedro Eduardo Trujillo's avatar Pedro Eduardo Trujillo
Browse files

Refactoriza conversor de coordenadas

parent a422f80e
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@ define([
	, Input
	, Converter
) {

	return declare(Input, {
		//	summary:
		//		Implementación de input GeographicCoordinate.
@@ -93,7 +94,7 @@ define([
				sValue = this._sWidget.get(this.valuePropertyName),
				obj = {};

			obj[this.propertyName] = Converter.DMS2DD(dValue, mValue, sValue);
			obj[this.propertyName] = Converter.dms2dd(dValue, mValue, sValue);

			this._emitSetValue(obj);
		},
@@ -128,7 +129,7 @@ define([
		_valueChanged: function(obj) {

			var value = obj[this.propertyName],
				translatedObj = Converter.DD2DMS(value);
				translatedObj = Converter.dd2dms(value);

			if (translatedObj) {
				this._dWidget.set(this.valuePropertyName, translatedObj.degrees);
+6 −9
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ define([
	, ModelImpl
	, Converter
) {

	return declare(Input, {
		//	summary:
		//		Implementación de input Point.
@@ -139,7 +140,7 @@ define([
				res), 1);
		},

		_onInnerModelValueChanged: function(res) {
		_onInnerModelValueChanged: function() {

			!this._omitNextInnerModelSerialize && this._publish(this._modelInstance.getChannel("SERIALIZE"));
			this._omitNextInnerModelSerialize = false;
@@ -239,7 +240,7 @@ define([
			this._showInputs(this._gcInputsInstances);
		},

		_onGetMapLocationWrapper: function(obj) {
		_onGetMapLocationWrapper: function() {

			var objSend = {
				"point": this._lastCoordinates ? [this._lastCoordinates.x, this._lastCoordinates.y] : null,
@@ -459,7 +460,7 @@ define([
				return [xValue, yValue];
			}

			var conversion = Converter.convert(inSr, outSr, xValue, yValue);
			var conversion = Converter.convertCoordinates(inSr, outSr, xValue, yValue);

			if (conversion) {
				return [conversion.x, conversion.y];
@@ -481,11 +482,7 @@ define([
				return true;
			}

			if (Math.abs(v1Dec - v2Dec) > threshold) {
				return true;
			}

			return false;
			return Math.abs(v1Dec - v2Dec) > threshold;
		}
	});
});
+114 −107
Original line number Diff line number Diff line
@@ -5,28 +5,9 @@ define([
) {

	//	summary:
	//		Widget para convertir coordenadas de un sistema a otro.
	//		Widget para realizar conversión de coordenadas.
	//	description:
	//		Se le pasa una latitud, una longitud, un sistema de coordenadas de origen
	//		y otro de destino al método 'convert' y devuelve las coordenadas convertidas.

	// Espacios de referencia permitidos
	var spatialReferences = {
		'4326': null, // definido por defecto en proj4
		'32628': "+proj=utm +zone=28 +ellps=WGS84 +datum=WGS84 +units=m +no_defs",
		'3857': null // definido por defecto en proj4
	};

	var isValidSpatialReference = function(/*String*/ reference) {
		//	summary:
		//		Devuelve si un espacio de referencia está permitido o no.
		//	spatialReference:
		//		Espacio de referencia a comprobar.
		//	returns:
		//		Booleano que indica si es válido o no.

		return Object.keys(spatialReferences).indexOf(reference.toString ? reference.toString() : reference) !== -1;
	};
	//		Expone métodos para validar y convertir elementos relacionados con coordenadas.

	var _isValidValue = function(/*Integer*/ value) {
		//	summary:
@@ -41,8 +22,7 @@ define([
		return value !== null && value !== undefined && !isNaN(value);
	};

	return {
		DMS2DD: function(/*Integer*/ degrees, /*Integer*/ minutes, /*Number*/ seconds) {
	var _dms2dd = function(/*Integer*/ degrees, /*Integer*/ minutes, /*Number*/ seconds) {
		//	summary:
		//		Convierte de grados, minutos y segundos a grados decimales.
		//	degrees:
@@ -55,6 +35,7 @@ define([
		//		Valor decimal de la coordenada o null si no es válida.

		if (!_isValidValue(degrees) || !_isValidValue(minutes) || !_isValidValue(seconds)) {

			return null;	// return null
		}

@@ -66,9 +47,9 @@ define([
		}

		return dd;	// return Number
		},
	};

		DD2DMS: function(/*Number*/ coordinate) {
	var _dd2dms = function(/*Number*/ coordinate) {
		//	summary:
		//		Convierte de grados decimales a grados, minutos y segundos.
		//	coordinate:
@@ -110,11 +91,30 @@ define([
		}

		return dms;	// return Object
		},
	};

		convert: function(/*String*/ src, /*String*/ dst, /*Number*/ x, /*Number*/ y) {
	// Espacios de referencia permitidos
	var _spatialReferences = {
		'4326': null, // definido por defecto en proj4
		'32628': "+proj=utm +zone=28 +ellps=WGS84 +datum=WGS84 +units=m +no_defs",
		'3857': null // definido por defecto en proj4
	};

	var _isValidSpatialReference = function(/*String*/ reference) {
		//	summary:
			//		Convierte coordenadas de un sistema a otro.
		//		Devuelve si un espacio de referencia está permitido o no.
		//	spatialReference:
		//		Espacio de referencia a comprobar.
		//	returns:
		//		Booleano que indica si es válido o no.

		return Object.keys(_spatialReferences).indexOf(reference.toString ? reference.toString() : reference) !== -1;
	};

	var _convert = function(/*String*/ src, /*String*/ dst, /*Number*/ x, /*Number*/ y) {
		//	summary:
		//		Recibe una latitud, una longitud, un sistema de coordenadas de origen y otro de destino, para devolver
		//		las coordenadas convertidas al sistema de referencia de destino.
		//	src:
		//		Espacio de referencia de entrada.
		//	dst:
@@ -126,7 +126,7 @@ define([
		//	returns:
		//		Objeto con las coordenadas convertidas.

			if (!isValidSpatialReference(src) || !isValidSpatialReference(dst) ||
		if (!_isValidSpatialReference(src) || !_isValidSpatialReference(dst) ||
			!_isValidValue(x) || !_isValidValue(y)) {
			return null;
		}
@@ -135,13 +135,20 @@ define([
			validSrc = validPrefix + src,
			validDst = validPrefix + dst;

			var customSrc = spatialReferences[src],
				customDst = spatialReferences[dst];
		var customSrc = _spatialReferences[src],
			customDst = _spatialReferences[dst];

		customSrc && proj4.defs(validSrc, customSrc);
		customDst && proj4.defs(validDst, customDst);

		return proj4(validSrc, validDst, { x: x, y: y });
		}
	};

	return {
		isValidCoordinate: _isValidValue,
		isValidSpatialReference: _isValidSpatialReference,
		convertCoordinates: _convert,
		dms2dd: _dms2dd,
		dd2dms: _dd2dms
	};
});