5 votos

Crear círculos mediante una fórmula

Estoy haciendo un proyecto para una empresa de telecomunicaciones. Tengo que representar círculos en el mapa (asumiendo el centro del círculo como la torre y el círculo como el área cubierta por esa señal), estoy usando capas base como Google Maps, Yahoo maps (Spherical Mercator) Así que he utilizado CreateGeodesicPolygon() con éxito para crear círculos mediante la lectura de los valores de DB.

Ahora como tengo que renderizar muchos círculos, me hizo cambiar a geoserver. Como los datos son proporcionados por la compañía de telecomunicaciones, ellos proporcionan los valores Lat, Lon, Gt, Gr, Pt, Pr, lambda (creo que su significado es irrelevante aquí). Estos valores se almacenan en la base de datos como son. Ahora debería usar una ecuación (ecuación de transmisión FRIIS) y sustituir los valores de cada fila (de una torre) para encontrar la distancia cubierta por la torre.

Por favor, sugiéranme alguna idea de cómo llevar a cabo esta tarea.... Les agradecería su orientación


Mi idea es utilizar estos pasos una vez que obtenga la distancia de la ecuación.

CREATE TABLE circles (cid int4,point_circle st_geometry);

INSERT INTO circles 
 VALUES(1,
        ST_BUFFER(ST_GeomFromText('POINT(lon lat)',SRID),radius,'quad-segs=8')
 );

Cree un almacén POSTGIS en geoserver y esta tabla de círculos como capa.

4voto

tobes Puntos 19

Si utilizas EPSG:4326 podrás hacer un buffer en grados, mientras que EPSG:900913 te permitirá hacer un buffer en metros. Google Mercator no conduce a medidas de longitud correctas, pero si sólo quieres tener una idea aproximada de tus datos, deberías estar bien.

Esto creará una vista que contiene los círculos en la proyección Google Mercator:

CREATE VIEW circles
AS 
SELECT
   tower_id,
   ST_BUFFER(
      ST_Transform(
          ST_SetSRID(
             ST_MakePoint(lon,lat),
             4326),
          900913,
      radius
   ) AS tower_circle
FROM towers;

2voto

Vasu Puntos 11

Puedes hacerlo con JavaScript si quieres y que el navegador del cliente se encargue de ello: Puedes probar el código en este sitio web: http://jsfiddle.net/NtuEv/

Básicamente la función toma 3 argumentos: latitud, longitud y radio. Devolverá las coordenadas que componen el círculo.

Puedes jugar con la siguiente línea de código para dar salida a las coordenadas como quieras, ya sea en forma de cadena de líneas o lo que sea:

response += lon_rad.toDeg() + "," + lat_rad.toDeg() + ",0 ";

Código Javascript:

var divElement = $('div#info');

// extend Number object with methods for converting degrees/radians
/** Convert numeric degrees to radians */
if (typeof (String.prototype.toRad) === "undefined") {
    Number.prototype.toRad = function () {
        return this * Math.PI / 180;
    }
}

/** Convert radians to numeric (signed) degrees */
if (typeof (String.prototype.toDeg) === "undefined") {
    Number.prototype.toDeg = function () {
        return this * 180 / Math.PI;
    }
}

function fmod (X, Y) {
 return X % Y;
}

function GetCircleCoordinates (lat, lng, radius) {

        var response = "";
        var rLat = lat.toRad();
        var rLon = lng.toRad();

        var d_rad = radius / 6378137;

        for (i = 0; i <= 360; i++) {

            var radial = i.toRad();
            var lat_rad = Math.asin(Math.sin(rLat) * Math.cos(d_rad) + Math.cos(rLat) * Math.sin(d_rad) * Math.cos(radial));
            var dlon_rad = Math.atan2(Math.sin(radial) * Math.sin(d_rad) * Math.cos(rLat), Math.cos(d_rad) - Math.sin(rLat) * Math.sin(lat_rad));
            var lon_rad = fmod((rLon + dlon_rad + Math.PI), 2 * Math.PI) - Math.PI;
            response += lon_rad.toDeg() + "," + lat_rad.toDeg() + ",0 ";
        }

        return response;
}

var circlecoords = GetCircleCoordinates(22.26, -73.34, 1100);

divElement.html(circlecoords);

EDITAR #1: Actualizado el enlace jsfiddle.... estaba mal, lo está: http://jsfiddle.net/NtuEv/

2voto

Adam Ernst Puntos 6939

Echa un vistazo a esta entrada del blog http://geo-solutions.blogspot.com/2010/11/fun-stuff-computing-circular-buffers-in.html que discute el uso del servicio WPS en GeoServer para producir círculos. También muestra por qué lo que estás tratando de hacer probablemente no producirá los resultados que esperas para grandes distancias.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X