# Vector Data Import

Import vector spatial data from files or URLs.

## Overview

Vector data import supports multiple file formats and import methods for point, line, and polygon data.

## Supported Formats

### GeoJSON

- **Extension**: `.geojson`, `.json`
- **Description**: GeoJSON Feature Collections
- **Features**: Full support for all geometry types and properties

### Shapefile

- **Extension**: `.shp`, `.zip` (containing shapefile components)
- **Description**: ESRI Shapefile format
- **Requirements**: ZIP archive must contain `.shp`, `.shx`, `.dbf` files
- **Note**: `.prj` file recommended for proper coordinate system

### KML

- **Extension**: `.kml`
- **Description**: Google Earth KML format
- **Features**: Supports placemarks, paths, and polygons

### CSV

- **Extension**: `.csv`
- **Description**: Comma-separated values with coordinates
- **Requirements**: Must have coordinate columns (lat/lon or x/y)
- **Features**: Automatic column detection

### GeoPackage

- **Extension**: `.gpkg`
- **Description**: OGC GeoPackage format
- **Features**: Supports multiple layers and raster data

### DXF

- **Extension**: `.dxf`
- **Description**: AutoCAD DXF format
- **Features**: Supports CAD drawings and annotations

### PBF

- **Extension**: `.pbf`
- **Description**: OpenStreetMap Protocol Buffer Format
- **Requirements**: `osm2pgsql` must be installed
- **Features**: High-performance OSM data import

## Import Methods

### File Upload

Upload files directly from your computer:

1. Navigate to upload page
2. Select file or drag and drop
3. Add optional description
4. Select target SRS (default: EPSG:4326)
5. Click "Upload"

**File Size Limit**: 50MB (configurable)

### URL Import

Import from web-accessible URLs:

1. Navigate to URL import page
2. Enter data URL
3. Configure import options
4. Optionally schedule import
5. Click "Import"

**Supported URL Types**:
- Direct file URLs
- GeoJSON service endpoints
- ArcGIS REST services
- WFS endpoints

### Scheduled Import

Set up recurring imports from URLs:

1. Configure URL import
2. Set schedule (daily, weekly, monthly)
3. Configure update mode (replace, append, upsert)
4. Save schedule

## Import Process

### Step 1: File Detection

The system automatically detects file type based on:
- File extension
- File content (for ambiguous extensions)
- ZIP archive contents

### Step 2: Metadata Extraction

Metadata is extracted including:
- Feature count
- Geometry types
- Bounding box
- Coordinate system
- Attribute fields

### Step 3: Data Processing

Data is processed based on file type:
- **GeoJSON**: Direct parsing and import
- **Shapefile**: Extraction from ZIP, coordinate transformation
- **CSV**: Coordinate column detection, geometry creation
- **KML**: Placemark and geometry extraction
- **PBF**: OSM data processing via osm2pgsql

### Step 4: PostGIS Import

Processed data is imported into PostGIS:
- Table creation: `spatial_data_{file_id}`
- Geometry conversion to PostGIS format
- Spatial index creation
- Attribute storage in JSONB

### Step 5: Registration

Dataset is registered in the system:
- Metadata stored in `spatial_files` table
- Access permissions set
- Version record created

## Configuration Options

### Target SRS

Select target spatial reference system:
- **EPSG:4326** (WGS84): Default, global coverage
- **EPSG:3857** (Web Mercator): Web mapping standard
- **Other**: Any valid EPSG code

### Update Mode

For scheduled imports:
- **Replace**: Replace all existing data
- **Append**: Add new data to existing
- **Upsert**: Update existing, insert new (requires key columns)

### Filters

Apply filters during import:
- **Spatial Filter**: Bounding box or geometry
- **Attribute Filter**: SQL WHERE clause
- **Feature Limit**: Maximum number of features

## Example: GeoJSON Import

```bash
# Via API
curl -X POST "https://example.com/upload.php" \
  -F "spatial_file=@data.geojson" \
  -F "description=Sample dataset" \
  -F "targetSRS=EPSG:4326"
```

## Example: URL Import

```bash
# Via API
curl -X POST "https://example.com/import_url.php" \
  -d "url=https://example.com/data.geojson" \
  -d "description=Imported from URL" \
  -d "targetSRS=EPSG:4326"
```

## Troubleshooting

### Common Issues

**File too large**
- Check file size limit configuration
- Consider splitting large files
- Use URL import for very large files

**Invalid geometry**
- Verify coordinate system
- Check for invalid geometries in source
- Use geometry validation tools

**Missing coordinate system**
- Ensure `.prj` file included for shapefiles
- Specify target SRS manually
- Check source data metadata

**Import timeout**
- Increase PHP execution time limit
- Use background import for large files
- Consider chunked upload for very large files

## Related Documentation

- [Raster Import](raster.md)
- [PostGIS Import](postgis.md)
- [ESRI Import](esri.md)
- [Installation Guide](../installation.md)

