ShapeFile, también conocido como Shape, es una figura o un conjunto de figuras de formas complejas (probablemente, no relacionadas). Un campo de forma puede ser uno de los siguientes tipos de geometría: punto, polilínea o polígono.
También es notable que junto con un archivo * .shp, se forma el archivo * .dbf y contiene la información del encabezado sobre nuestras formas. Es importante que el archivo * .dbf tenga el mismo nombre que el archivo * .shp. El archivo .shp principal almacena datos geométricos indexados en un archivo .shx (índice) y atributos extendidos con sus valores en dBASE (.dbf). Las publicaciones de ESRI tienen una especificación completa del formato ShapeFile (.shp, .shx, .dbf) y utilizan el soporte completo entre varios sistemas GIS y CAD; se utilizan ampliamente para representar todo tipo de mapas y capas de diagramas cartográficos.
Si se pierde uno de los archivos de este conjunto, los datos pueden dañarse o el proyecto se perderá por completo.
ArcGIS es un sistema de información geográfica (GIS) para trabajar con mapas e información geográfica mantenida por el Environmental Systems Research Institute (Esri). Se utiliza para crear y usar mapas, compilar datos geográficos, analizar información cartografiada, compartir y descubrir información geográfica, usar mapas e información geográfica en una variedad de aplicaciones y administrar información geográfica en una base de datos. Obtenga más información sobre la tecnología ArcGIS.
En el contexto de SIG, los formatos de datos vectoriales (o esencialmente modelos de almacenamiento de datos vectoriales) son una de las formas de mostrar objetos del mundo real.
Puede abrir archivos .shp con el siguiente software: CADE Pro, Parallels, Tools Center, AutoCAD, ArcExplorer de ESRI, Free File Viewer Pro.
¿Cuándo debería usar un shapefile?
- Al exportar datos para su uso en una aplicación de software que no es de Esri
- Al exportar datos para su uso en ArcView GIS 3 o ArcInfo Workstation
- Cuando necesite escribir características y atributos simples rápidamente, como para los servicios de geoprocesamiento (sin embargo, debe tener en cuenta las limitaciones que se detallan a continuación).
Desventajas de ShapeFile
Con algunas excepciones que se indican a continuación, los shapefiles son aceptables para almacenar geometría de entidad simple. Sin embargo, los shapefiles tienen serios problemas con los atributos. Por ejemplo, no pueden almacenar valores nulos, redondean números, tienen poca compatibilidad con cadenas de caracteres Unicode, no permiten nombres de campo de más de 10 caracteres y no pueden almacenar tanto una fecha como una hora en un campo. Estos son solo los principales problemas. Además, no son compatibles con las capacidades que se encuentran en las geodatabases, como dominios y subtipos. Entonces, a menos que tenga atributos muy simples y no requiera capacidades de geodatabase, no use shapefiles.
Limitaciones de geometría
Hay un límite de tamaño de 2 GB para cualquier archivo de componente de shapefile, lo que se traduce en un máximo de aproximadamente 70 millones de entidades de puntos. El número real de entidades de línea o polígono que puede almacenar en un shapefile depende del número de vértices en cada línea o polígono (un vértice es equivalente a un punto).
Los shapefiles no contienen una tolerancia x, y como las clases de entidad de geodatabase. La tolerancia x, y es la distancia mínima entre coordenadas antes de que se consideren iguales. Esta tolerancia x, y se usa al evaluar relaciones entre entidades dentro de la misma clase de entidad o entre varias clases de entidad diferentes. También se utiliza mucho al editar funciones. Si está realizando algún tipo de operación que implique la comparación entre entidades, como el uso de herramientas de superposición, la herramienta Recortar, la herramienta Seleccionar capa por ubicación o cualquier herramienta que tome dos o más clases de entidad como entrada, debería utilizar la entidad de geodatabase. clases (que tienen una tolerancia x, y) en lugar de shapefiles.
Un shapefile puede ocupar de tres a cinco veces más espacio que una geodatabase de archivos o SDE debido a los métodos de compresión de formas.
Los shapefiles admiten multiparches, pero carecen de soporte para las siguientes capacidades avanzadas de multiparche:
- Coordenadas de textura
- Texturas y color de la pieza
- Iluminación normal
El índice espacial de un shapefile es ineficaz en comparación con el de una clase de entidad de geodatabase. Esto significa que las consultas espaciales (como la selección de entidades dentro de un polígono) toman más tiempo en comparación con una clase de entidad de geodatabase. Esta ineficiencia solo se nota cuando se trabaja con un gran número de funciones.
Las curvas definidas paramétricamente (también conocidas como curvas de arco circular) no se admiten en shapefiles. Las curvas paramétricas se crean editando las clases de entidad de la geodatabase, como se describe en Crear una curva. Las curvas de arco circular utilizan una fórmula matemática para dibujar la curva. Si exporta una clase de entidad de geodatabase que contiene entidades de curva de arco circular a un shapefile, las entidades curvas se transforman en entidades de línea simple con vértices poco espaciados para capturar la forma curva.
A diferencia de otros formatos, los shapefiles almacenan atributos numéricos en formato de caracteres en lugar de formato binario. Para números reales (es decir, números que contienen decimales), esto puede dar lugar a errores de redondeo. Esta limitación no se aplica a las coordenadas de las formas, solo a los atributos.
Puede leer más sobre ShapeFile aquí
Puede leer más sobre cómo trabajar con este formato aquí
Cómo crear un archivo .SHP usando el código
Hablamos sobre el formato en sí y aprendimos cómo abrir archivos terminados, pero ¿cómo trabajar con él en Delphi? Hay tres formas:
- GDAL: biblioteca de traducción para formatos de datos geoespaciales vectoriales y raster que se publica bajo una licencia de código abierto estilo X / MIT por la Fundación Geoespacial de Código Abierto. Como biblioteca, presenta un modelo de datos abstractos de un solo ráster y un modelo de datos abstractos de un solo vector a la aplicación de llamada para todos los formatos admitidos. También viene con una variedad de utilidades de línea de comando útiles para la traducción y el procesamiento de datos.
- MapWindow GIS : aplicación GIS (cartografía) de código abierto y conjunto de componentes cartográficos programables. Este proyecto es desarrollado por el Laboratorio de Software Geoespacial de la Universidad Estatal de Idaho. La aplicación se ejecuta solo en Windows, no es compatible con el sistema operativo Linux. En primer lugar, este proyecto es muy interesante para los desarrolladores, porque el núcleo de esta aplicación está escrito en C ++ y es una biblioteca ActiveX que puede usar por separado de MapWindow y desarrollar su propia aplicación para visualizar y procesar geodatos (funciona en todos entornos de desarrollo que admiten la importación de componentes ActiveX). Puede leer más sobre esto aquí. Githab.
- Y la mejor opción es utilizar FastReports. ¿Por qué? ¡Porque está listo para usar! Tómalo, descárgalo de inmediato, y he aquí, ¡te muestra todo! Es como un pato asado de Pekín. Si lo cocinaste tú mismo, tendrías que encurtirlo durante una semana y, en nuestro caso, ¡ya lo hemos encurtido para ti! ¡Ven y cómelo ahora mismo!
Crear un archivo de mapa SHP
Vaya al Diseñador de FR. Busque el objeto de mapa y agréguelo al documento.
Debería aparecer un editor de mapas. La primera pestaña contiene información general.
Mapa: establezca el nombre de nuestro mapa. Además, aquí se mostrarán las capas del mapa que se pueden mover con las flechas.
Agregar: cargue un archivo en formato shp, osm o gpx (en nuestro caso, SHP).
Eliminar: elimina la capa del mapa.
Mantener relación de aspecto: mantenga la relación de aspecto.
Proyección de Mercator: utilice la proyección de Mercator.
Para agregar una nueva capa, haga clic en el botón "Agregar ...". Aparecerá la siguiente ventana:
- mapa del archivo (.shp / .dbf, .osm, .gpx). Este es el tipo de mapa más utilizado. Por ejemplo, puede imprimir un mapa del mundo y resaltar los países donde las ventas alcanzaron más de cierto valor;
- capa de geodatos vacía presentada por el programa. Su aplicación debe proporcionar coordenadas geográficas (un par de valores: latitud y longitud), que se mostrarán como un punto en el mapa. Un punto puede tener una firma, así como un tamaño y / o color diferente, dependiendo de algunos datos. En la práctica, este tipo de mapa se utiliza como segunda capa (la primera capa, la base, se toma del archivo de mapa). Por ejemplo, la capa base muestra un mapa de un país y la segunda capa: puntos con los nombres de las ciudades donde se realizaron las ventas. El tamaño y el color del punto se pueden ajustar para que el nivel de ventas en una ciudad determinada sea comprensible.
Si seleccionó una capa basada en un archivo de mapa, debe especificar adicionalmente cómo almacenar los datos del mapa:
- Los datos se implementarán en el archivo del informe. Además, el informe puede aumentar considerablemente de tamaño.
- El archivo de informe se referirá al archivo de mapa, la implementación no ocurre. Este modo es útil si tiene varios informes que utilizan los mismos mapas.
Los mapas de gran volumen (más de 30 MB) o los mapas con una gran cantidad de polígonos (más de 20.000) ralentizarán drásticamente el informe.
Editor de relleno Cuando hacemos clic en el botón Rellenar entramos en el editor de relleno. Hay 3 propiedades en la pestaña Pincel:
Estilo de pincel El estilo de pincel tiene varios formatos prefabricados:
Sólido: rellene con un solo color;
Claro: un fondo claro sin ningún color;
Horizontal: líneas horizontales para todo el fondo;
Vertical: líneas verticales para todo el fondo;
Diagonal hacia adelante: líneas diagonales para todo el fondo;
Diagonal hacia atrás: líneas diagonales hacia atrás para todo el fondo;
Cruce - líneas cruzadas en todo el fondo;
Cruz diagonal: líneas cruzadas diagonales para todo el fondo;
El color de fondo, así como el color de primer plano, se pueden seleccionar de la paleta de colores ya preparada o se pueden establecer haciendo clic en el botón Otro.
En la segunda pestaña, tenemos la configuración de degradado para el fondo.
El estilo de degradado puede ser horizontal, vertical, ovalado, rectangular, vertical con una transición a un color diferente en el centro, horizontal con una transición a un color diferente en el centro.
Los colores inicial y final se pueden seleccionar de una paleta de colores prefabricada o se pueden establecer haciendo clic en el botón Otro.
En la tercera pestaña podemos ver el editor de Relleno en forma de vidrio.
Hay una opción de orientación: espejo vertical, horizontal, vertical y horizontal.
Puede seleccionar un color de la paleta lista para usar o establecer el color deseado haciendo clic en el botón Otro.
Mezcla: coeficiente de mezcla de colores (en la captura de pantalla, el valor es 0.5)
Mostrar sombreado - mostrar sombreado.
Regresemos al editor de mapas y busquemos el editor de marcos.
Bloque de línea: puede seleccionar un estilo del rango ofrecido, establecer el ancho de línea y seleccionar el color.
Bloque de marco: hay una muestra de marco en el centro y podemos elegir dónde aplicar el estilo de línea a través de la muestra o usando botones (bordes en todos los lados, sin bordes ni bordes en ciertos lados).
Al agregar una sombra, también podemos especificar el ancho y el color.
Ahora consideremos la segunda pestaña del editor de mapas: la escala de colores.
El color del marco se puede seleccionar de la paleta de colores prefabricada al configurar el ancho de los marcos. Establecer la posición de la escala. En nuestro ejemplo, tenemos la ubicación en la esquina inferior derecha.
Ingrese el nombre de la escala en el campo Texto y configure la fuente y su tamaño presionando el botón Fuente….
La pestaña Escala de tamaño no difiere de la Escala de color, así que no lo repetiré.
Después de guardar el resultado, vaya a la pestaña de vista previa y vea el resultado final. Nuestro mapa no será estático, aún puede escalarlo en cualquier lugar y cuando pase el mouse sobre un área específica (en nuestro caso, cualquier país), este fragmento completo se resaltará.
Creando un mapa SHP usando el código
Ahorro en SHP | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
procedure TForm1.FormCreate(Sender: TObject); var page: TfrxReportPage; map: TfrxMapView; layer: TfrxMapFileLayer; applayer: TfrxApplicationLayer; begin page := TfrxReportPage(frxReport1.FindObject('Page1')); map := TfrxMapView.Create(page); with map do begin CreateUniqueName(); SetBounds(0, 0, 700, 800); MaxZoom := 50; MinZoom := 1; KeepAspectRatio := True; MercatorProjection := True; with ColorScale do begin Visible := True; BorderColor := 0; BorderWidth := 1; Dock := sdBottomRight; FillColor := 16777215; ValueFormat := '%1.0f'; with Font do begin Charset := 1; Color := -16777208; Height := -13; Name := 'Tahoma'; Style := []; end; with TitleFont do begin Charset := 1; Color := -16777208; Height := -13; Name := 'Tahoma'; Style := []; end; end; with SizeScale do begin Visible := True; BorderColor := 0; BorderWidth := 1; Dock := sdTopLeft; FillColor := 16777215; ValueFormat := '%1.0f'; with Font do begin Charset := 1; Color := -16777208; Height := -13; Name := 'Tahoma'; Style := []; end; with TitleFont do begin Charset := 1; Color := -16777208; Height := -13; Name := 'Tahoma'; Style := []; end; end; end; layer := TfrxMapFileLayer.Create(map); with layer do begin CreateUniqueName(); MapFileName := 'C:\Program Files (x86)\FastReport 6 VCL Enterprise\Demos\Main\Maps\world.shp'; DataSet := MapOrderDetailsDS; LabelColumn := 'NAME'; SpatialColumn := 'NAME'; ZoomPolygon := 'Germany'; LabelKind := mlName; MapPalette := mpNone; MapAccuracy := 0; PixelAccuracy := 0; HighlightColor := 65280; Operation := opSum; ValueFormat := '%1.0f'; PointLabelsVisibleAtZoom := 1; with ColorRanges do begin RangeFactor := rfValue; RangeCount := 0; Visible := True; StartColor := 255; MiddleColor := 65535; EndColor := 32768; end; with SizeRanges do begin RangeFactor := rfValue; {uses frxMapRanges} RangeCount := 0; Visible := True; StartSize := 4; EndSize := 20; end; end; applayer := TfrxApplicationLayer.Create(map); applayer.CreateUniqueName(); with applayer do begin DataSet := MapOrderDetailsDS; AnalyticalValue := '<MapOrderDetails."UnitPrice"> * <MapOrderDetails."Quantity"> * (1 - <MapOrderDetails."Discount">)'; Filter := '<MapOrders."ShipCountry"> = ''Germany'''; HighlightColor := 65280; Operation := opSum; ValueFormat := '%1.0f'; LabelKind := mlName; MapPalette := mpNone; PointLabelsVisibleAtZoom := 1; LabelValue := '<MapOrders."ShipCity">'; LatitudeValue := '<MapOrders."Latitude">'; LongitudeValue := '<MapOrders."Longitude">'; SizeRanges.RangeFactor := rfValue; SizeRanges.RangeCount := 3; SizeRanges.Visible := True; SizeRanges.StartSize := 8; SizeRanges.EndSize := 20; ColorRanges.RangeFactor := rfValue; ColorRanges.RangeCount := 3; ColorRanges.Visible := True; ColorRanges.StartColor := 255; ColorRanges.MiddleColor := 65535; ColorRanges.EndColor := 32768; end; frxReport1.ShowReport; end; |
Shape está lejos de ser el único formato para trabajar con mapas: también hay OpenStreetMap (OSM) y GPS eXchange Format, pero hablaré de ellos en otros artículos.