La mejor manera de almacenar una lista de puntos

Quiero almacenar (almacenamiento masivo) una lista de puntos; para ser más precisos es una lista que contiene un número no definido (pero no superior a 200) de grupos de coordenadas, donde cada grupo representa un área (un rectángulo). Esta área podría ser por ejemplo un Rect estructura.

Cuál es la mejor manera para mí:
En orden de importancia:

  1. Espacio ocupado en memoria de almacenamiento (obviamente menos es mejor).
  2. Facilidad con la que se modifica el archivo (sería mejor poder identificar y cambiar la coordenada única, en lugar de reescribir todo el archivo debido a un cambio).
  3. Lectura veloz.
  4. Velocidad de escritura.

Ya tenía algunas ideas sobre cómo configurar el trabajo (por ejemplo, formato de texto simple administrado por una clase personalizada, serialización, base de datos de acceso (solo puedo usar una base de datos de acceso), ...), pero ¿cuál es la mejor solución?

preguntado el 12 de junio de 12 a las 17:06

Esta es una pregunta extremadamente subjetiva. "Mejor" va a depender de su preferencia personal. Una solución binaria simple sería la más eficiente en memoria, pero también es una de las opciones más difíciles de codificar y depurar. El texto ocupa más memoria, pero es un poco más fácil de leer. XML es una de las soluciones más fáciles de programar, pero es mucho menos eficiente en memoria. -

@ Cyborgx37 Es una pregunta subjetiva porque es un trabajo subjetivo. De todos modos, escribí lo que quiero decir con el albergue mejor calificado . -

¿Quiere esto como un almacenamiento de archivos local, o está bien una base de datos? -

@ReedCopsey Si una base de datos es la más cercana a mis solicitudes, preferiría una base de datos (pero solo puedo usar una base de datos de acceso), de lo contrario, preferiría un archivo local. -

@gliderkite ¿Solo puede usar una base de datos de acceso? -

2 Respuestas

Este es exactamente el conjunto de problemas que abordan la mayoría de los formatos de almacenamiento GIS. Hay muchos formatos diferentes disponibles, todos con varias ventajas y desventajas.

El proyecto OGR apoya muchos formatos para datos vectoriales de estilo GIS, casi todos los cuales admiten el almacenamiento de características de área con la mayoría de las características que busca. Uno de los "más nuevos" aquí sería Base de datos geográfica de archivos de ESRI formato, que es compatible con .NET a través de contenedores C# de OGR.

Como alternativa, muchos sistemas de bases de datos, como SQL Server, PostgreSQL, Oracle y otros, admiten el almacenamiento de datos espaciales directamente en la base de datos. Esto puede ser un poco "pesado" según sus necesidades, pero admitirá un rendimiento y una escalabilidad muy altos.

Respondido el 12 de junio de 12 a las 17:06

¿SIG significa qué? ¿Tiene alguna referencia a los contenedores C# de OGR? - planeador

SIG de @gliderkite: en.wikipedia.org/wiki/Geographic_information_system Los contenedores C# de OGR se generan automáticamente y forman parte del proyecto OGR. Están incluidos en los binarios aquí (gisinternals.com/sdk) Sin embargo, los "documentos" son básicamente solo los documentos de C++. - Reed Copsey

SQL Server tiene formatos de tipo espacial nativos que se pueden usar para almacenar polígonos

http://technet.microsoft.com/en-us/library/bb964711
http://technet.microsoft.com/en-us/library/bb895267.aspx

Para la manipulación, puede cargar los datos en un objeto para leer/modificar/validar nuevos puntos en cada polígono.

EDIT: Jason Follas tiene una buena exploración de los tipos espaciales aquí:
http://jasonfollas.com/blog/archive/2008/03/14/sql-server-2008-spatial-data-part-1.aspx

EDIT: Veo el OP editado en el sentido de que solo puede usar una base de datos de acceso, por lo que mi respuesta ya no se aplica ... pero lo dejaré como está en caso de que alguien más encuentre esta pregunta. sin tal limitación DB.

En cuanto al OP, usar solo una base de datos de acceso limita bastante sus habilidades.
Yo consideraría dos tablas: Área y Puntos con una relación simple de uno a muchos.

Respondido el 12 de junio de 12 a las 18:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.