Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Consulta para obtener datos en base a unas coordenadas

Estas en el tema de Consulta para obtener datos en base a unas coordenadas en el foro de Oracle en Foros del Web. Buenas tardes a toda la gran comunidad de foros del web, soy novato en programacion en bases de datos y mas en Oracle, por tal ...
  #1 (permalink)  
Antiguo 22/11/2015, 12:56
 
Fecha de Ingreso: octubre-2005
Mensajes: 188
Antigüedad: 18 años, 6 meses
Puntos: 0
Consulta para obtener datos en base a unas coordenadas

Buenas tardes a toda la gran comunidad de foros del web, soy novato en programacion en bases de datos y mas en Oracle, por tal vengo solicitando su valiosa colaboracion, Necesito una consulta que dado el numero de un trafo, me ubique los trafos vecinos a el mas unos cuantos datos adicionales. La informacion de cada trafo esta almacenada en una tabla llamada TECNI, en esta lo principal para mi consulta es el numero del trafo y las coordenadas X y Y, estas coordenadas me dan la ubicacion geografica del trafo y de ahi puedo obtener sus vecinos en un rango. La idea es mediante una aplicacion pido al usuario el numero del trafo, un periodo, este periodo es para obtener algunos datos que se registraron para este trafo en ese periodo, dicho periodo lo ingreso en el formato YYYYMM, ejemplo: 201511, eso seria noviembre del 2015, y un area a consultar, el cual puede ser un entero por ejemplo 1, 2 o 3.
Entonces dado un trafo N° 1T0050, el cual tiene unas coordenadas en X = a 72.25685 y en Y = 5.3698, y si el area es 1, me retorne todos aquellos trafos vecinos que sus coordenas X y Y esten entre los valores del trafo principal sumandoles el area y restandoles el area, para que coincidan dentro del plano cartesiano que se genera. Subí una imagen, espero se vea para mejor comprension.
Aqui tengo parte de la consulta, donde pido los datos y trato de obtener el resultado pero no me puedo mover sobre el eje de las Y, si me pueden colaborar estare eternamente agradecido.

Código PHP:
select t.PTO_TRANSF,ALIMENTADOR,DECODE(t.PTO_TRANSF,'&Trafo','Principal','Vecino'Buscado,
t.COORDENADA_X,t.COORDENADA_y,c.direccion,b.nombre Barrio,m.nombre Municipio,
be.perdida_total_mensualizada perdida,
(
select p.perdida_total_mensualizada from balance_energia p where p.trafo be.trafo and P.periodo '201507'PANTERIOR
,be.indica_edificio,be.grupo_contratacion,be.VAR_ESTADO_TRAF ,
TO_CHAR(C.SUCURSAL,'0000')||TO_CHAR(C.SECTOR,'00')||TO_CHAR(C.ZONA,'000')||TO_CHAR(C.CORRELATIVO_RUTA,'000000') ) RUTA
from tecni t
cliente cbalance_energia beBARRIOS B,municipio mTRANSFORMADORES T
where
trim
(c.transformador) = t.PTO_TRANSF
and t.numero_cliente c.numero_cliente
--AND C.SUCURSAL IN (1000,2000,4000)
and 
c.tarifa '6201'
and c.estado_cliente != 2
AND T.TRF_NRO TRIM(C.TRANSFORMADOR)
AND 
C.NUMERO_CLIENTE T.TRF_CODIGO_CUENTA
and t.COORDENADA_X is not null
and be.trafo t.PTO_TRANSF
and be.periodo '201509'
and c.municipio m.cod_municipio
and b.codigo_barrio (+) = c.comuna
and b.municipio (+) = c.municipio
AND t.COORDENADA_X >=ROUND((SELECT (tecni.COORDENADA_X 0.000800)
FROM tecni,cliente
WHERE tECNI
.PTO_TRANSF trim(cliente.transformador)
and 
alimentador like concat(substr( (SELECT t.ALIMENTADOR FROM tecni WHERE tecni.numero_cliente c.numero_cliente),0,4),'%')
and 
tECNI.PTO_TRANSF ='&Trafo'
and cliente.tarifa 6201
AND TECNI.NUMERO_CLIENTE CLIENTE.NUMERO_CLIENTE
AND C.SECTOR CLIENTE.SECTOR),6)
AND 
t.COORDENADA_X <= ROUND((SELECT (tecni.COORDENADA_X 0.000800)
FROM tecni,cliente
WHERE tECNI
.PTO_TRANSF trim(cliente.transformador)
and 
alimentador like concat(substr( (SELECT t.ALIMENTADOR FROM tecni WHERE tecni.numero_cliente c.numero_cliente),0,4),'%')
AND 
tECNI.PTO_TRANSF ='&Trafo'
and cliente.tarifa 6201
AND TECNI.NUMERO_CLIENTE CLIENTE.NUMERO_CLIENTE
AND C.SECTOR CLIENTE.SECTOR),6)
order by t.coordenada_x

  #2 (permalink)  
Antiguo 22/11/2015, 13:31
 
Fecha de Ingreso: octubre-2005
Mensajes: 188
Antigüedad: 18 años, 6 meses
Puntos: 0
Respuesta: Consulta para obtener datos en base a unas coordenadas

En esta parte:
AND t.COORDENADA_X >=ROUND((SELECT (tecni.COORDENADA_X - 0.000800)
FROM tecni,cliente
WHERE tECNI.PTO_TRANSF = trim(cliente.transformador)
y esta otra:
AND t.COORDENADA_X <= ROUND((SELECT (tecni.COORDENADA_X + 0.000800)
FROM tecni,cliente
WHERE tECNI.PTO_TRANSF = trim(cliente.transformador)
la idea es reemplazar ese valor que estoy sumando y restando por el que el usuario ingrese.

Etiquetas: coordenadas, round, usuario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:27.