5 votos

La mejor estrategia para el polígono de búsqueda?

Tengo una bastante simple pregunta. ¿Cuál es la mejor estrategia para hacer el siguiente escenario? Creo que esta es una situación muy común:

  1. Tengo varios miles de conjunto de datos con el polígono/puntos. Cada conjunto de datos/registro puede tener varios polígonos.

  2. Permitir a los usuarios dibujar un polígono y de búsqueda de conjuntos de datos que caen dentro de ese espacio

  3. Tengo varios predefinidos polígono/áreas, que los usuarios también pueden utilizar/selección para la búsqueda de conjuntos de datos.

Cuando la búsqueda se realiza, simplemente mostrar la lista de los conjuntos de datos, mostrar como marcadores en un mapa. Yo no estoy preocupado por el poco, porque ha sido hecho sólo con OpenLayers.

Mis opciones actuales (soy nuevo y algunas de mis opciones puede no ser posible. Por favor, hágamelo saber si ese es el caso) son:

  1. Poner los conjuntos de datos en PostGIS, configurar en Geoserver. Poner predefinidos polígonos de la recta en el geoserver. El uso de WMS de filtrado.
  2. Poner los conjuntos de datos en PostGIS, pero no en Geoserver. Poner predefinidos polígonos en PostGIS y Geoserver para mostrar. Utilizar PostGIS intersección.
  3. He oído de otra persona que por su rendimiento ,es mejor calcular la intersección usando una aplicación personalizada, por ejemplo, Java / otros

No estoy seguro de cuál es la mejor en términos de rendimiento y eficiencia. Las sugerencias son muy bienvenidos!

4voto

user2831 Puntos 11

Si es sólo de búsqueda que usted está buscando, usted puede hacer una petición WFS con un filtro espacial de tipo Contiene o corta, algo como:

<wfs:GetFeature service="WFS" version="1.1.0"
  xmlns:topp="http://www.openplans.org/topp"
  xmlns:wfs="http://www.opengis.net/wfs"
  xmlns="http://www.opengis.net/ogc"
  xmlns:gml="http://www.opengis.net/gml"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.opengis.net/wfs
                      http://schemas.opengis.net/wfs/1.1.0/wfs.xsd">
  <wfs:Query typeName="topp:states">
    <Filter>
      <Intersects>
        <PropertyName>the_geom</PropertyName>
          <gml:Polygon>
            ...
          </gml:Polygon>
        </Intersects>
      </Filter>
  </wfs:Query>
</wfs:GetFeature>

Lo anterior se traduce en un nativo de búsqueda espacial en PostGIS

1voto

texai Puntos 178

usted puede utilizar cql o ecql filtros.

cql_filter=INTERSECT(the_geom,%20POINT%20(-10.00000%20.000000))

o

BBOX(the_geom, -10, 20, -30, 40)

o

Cruz de la capa de filtrado, aquí.

Es decir, la capacidad de encontrar en la capa de Una de las características que tienen un cierto relación con las características de la capa B. Esto puede ser usado, por ejemplo, para encontrar todas las paradas de autobús dentro de una cierta distancia de una tienda, o todos los café tiendas en un determinado distrito de la ciudad. Desde las funciones de filtro son apoyado ampliamente en GeoServer esta cruz de la capa de filtrado puede ser aplicado en SLDs, CQL filtros y WFS solicitudes por igual.

para wms:

DWITHIN(the_geom, collectGeometries(queryCollection('sf:roads','the_geom','INCLUDE')),
        200, meters)

para wfs:

@Andrea Aime ha dado un ejemplo acerca de wfs solicitud.

al lado de esta geodjango tiene un montón de espacio de búsqueda como desee...

espero te sirva de ayuda...

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