Quick Dataset Creation
Usecase
- Provide quick and easy ways to create complete datasets with minimal code.
- Use helper functions for common dataset creation patterns.
- Support different data source types (GeoJSON, Raster) with simple configuration.
- Enable rapid prototyping and development of map applications.
GeoJSON Dataset
Basic GeoJSON Dataset
typescript
import { createGeoJsonDataset } from '@hungpvq/vue-map-dataset';
const geojsonData = {
type: 'FeatureCollection',
features: [
{
type: 'Feature',
properties: { name: 'Point 1', id: 1 },
geometry: {
type: 'Point',
coordinates: [105.8342, 21.0285],
},
},
{
type: 'Feature',
properties: { name: 'Point 2', id: 2 },
geometry: {
type: 'Point',
coordinates: [105.8442, 21.0385],
},
},
],
};
// Create complete dataset with one function call
const dataset = createGeoJsonDataset({
name: 'My GeoJSON Dataset',
geojson: geojsonData,
type: 'point',
color: '#ff6b6b',
});
GeoJSON with Different Layer Types
Point Layer
typescript
const pointDataset = createGeoJsonDataset({
name: 'Points Dataset',
geojson: pointGeoJSON,
type: 'point',
color: '#ff6b6b',
});
Line Layer
typescript
const lineDataset = createGeoJsonDataset({
name: 'Lines Dataset',
geojson: lineGeoJSON,
type: 'line',
color: '#4ecdc4',
});
Area Layer (Polygon)
typescript
const areaDataset = createGeoJsonDataset({
name: 'Areas Dataset',
geojson: polygonGeoJSON,
type: 'area',
color: '#45b7d1',
});
Symbol Layer
typescript
const symbolDataset = createGeoJsonDataset({
name: 'Symbols Dataset',
geojson: symbolGeoJSON,
type: 'symbol',
color: '#f39c12',
});
GeoJSON with Custom Properties
typescript
const customDataset = createGeoJsonDataset({
name: 'Custom Properties Dataset',
geojson: {
type: 'FeatureCollection',
features: [
{
type: 'Feature',
properties: {
name: 'Custom Point',
category: 'important',
value: 100,
},
geometry: {
type: 'Point',
coordinates: [105.8342, 21.0285],
},
},
],
},
type: 'point',
color: '#e74c3c',
});
Raster Dataset
Basic Raster URL Dataset
typescript
import { createRasterUrlDataset } from '@hungpvq/vue-map-dataset';
const rasterDataset = createRasterUrlDataset({
name: 'My Raster Dataset',
tiles: ['https://example.com/tiles/{z}/{x}/{y}.png'],
});
Raster with Multiple Tile Sources
typescript
const multiRasterDataset = createRasterUrlDataset({
name: 'Multi Source Raster',
tiles: ['https://tile1.example.com/{z}/{x}/{y}.png', 'https://tile2.example.com/{z}/{x}/{y}.png', 'https://tile3.example.com/{z}/{x}/{y}.png'],
});
Raster with Bounds and Zoom Levels
typescript
const boundedRasterDataset = createRasterUrlDataset({
name: 'Bounded Raster Dataset',
tiles: ['https://example.com/tiles/{z}/{x}/{y}.png'],
bounds: [-180, -85.051129, 180, 85.051129], // [west, south, east, north]
minZoom: 0,
maxZoom: 18,
});
Raster with Custom Bounds
typescript
const customBoundsRaster = createRasterUrlDataset({
name: 'Vietnam Raster',
tiles: ['https://vietnam-tiles.example.com/{z}/{x}/{y}.png'],
bounds: [102.144, 8.179, 109.464, 23.393], // Vietnam bounds
minZoom: 5,
maxZoom: 15,
});
Satellite Imagery Raster
typescript
const satelliteDataset = createRasterUrlDataset({
name: 'Satellite Imagery',
tiles: ['https://api.mapbox.com/v4/mapbox.satellite/{z}/{x}/{y}.jpg?access_token=YOUR_TOKEN'],
minZoom: 0,
maxZoom: 20,
});
Weather Raster Layer
typescript
const weatherDataset = createRasterUrlDataset({
name: 'Weather Radar',
tiles: ['https://weather.example.com/radar/{z}/{x}/{y}.png'],
bounds: [-180, -85, 180, 85],
minZoom: 2,
maxZoom: 12,
});
Integration Examples
Adding Quick Datasets to Map
vue
<template>
<Map @map-loaded="onMapLoaded">
<LayerControl position="top-left" show />
<IdentifyControl position="top-right" />
</Map>
</template>
<script setup lang="ts">
import { Map } from '@hungpvq/vue-map-core';
import { LayerControl, IdentifyControl, useMapDataset } from '@hungpvq/vue-map-dataset';
import { createGeoJsonDataset, createRasterUrlDataset } from '@hungpvq/vue-map-dataset';
function onMapLoaded(map: any) {
const { addDataset } = useMapDataset(map.id);
// Add GeoJSON dataset
const geojsonDataset = createGeoJsonDataset({
name: 'Cities',
geojson: citiesGeoJSON,
type: 'point',
color: '#ff6b6b',
});
addDataset(geojsonDataset);
// Add Raster dataset
const rasterDataset = createRasterUrlDataset({
name: 'Satellite',
tiles: ['https://api.mapbox.com/v4/mapbox.satellite/{z}/{x}/{y}.jpg?access_token=YOUR_TOKEN'],
});
addDataset(rasterDataset);
}
</script>
Multiple Quick Datasets
vue
<template>
<Map @map-loaded="onMapLoaded">
<LayerControl position="top-left" show />
<IdentifyControl position="top-right" />
</Map>
</template>
<script setup lang="ts">
import { Map } from '@hungpvq/vue-map-core';
import { LayerControl, IdentifyControl, useMapDataset } from '@hungpvq/vue-map-dataset';
import { createGeoJsonDataset, createRasterUrlDataset } from '@hungpvq/vue-map-dataset';
function onMapLoaded(map: any) {
const { addDataset } = useMapDataset(map.id);
// Create multiple datasets
const datasets = [
// Points dataset
createGeoJsonDataset({
name: 'Points',
geojson: pointsData,
type: 'point',
color: '#ff6b6b',
}),
// Lines dataset
createGeoJsonDataset({
name: 'Roads',
geojson: roadsData,
type: 'line',
color: '#4ecdc4',
}),
// Areas dataset
createGeoJsonDataset({
name: 'Districts',
geojson: districtsData,
type: 'area',
color: '#45b7d1',
}),
// Raster dataset
createRasterUrlDataset({
name: 'Elevation',
tiles: ['https://elevation.example.com/{z}/{x}/{y}.png'],
minZoom: 0,
maxZoom: 15,
}),
];
// Add all datasets
datasets.forEach((dataset) => addDataset(dataset));
}
</script>
Configuration Options
GeoJSON Dataset Options
typescript
interface GeojsonDatasetOption {
name: string; // Dataset name
geojson: GeoJSON; // GeoJSON data
type: 'point' | 'line' | 'area' | 'symbol'; // Layer type
color?: string; // Optional color (default: random)
}
Raster Dataset Options
typescript
interface RasterUrlDatasetOption {
name: string; // Dataset name
tiles: string[]; // Tile URLs
bounds?: [number, number, number, number]; // [west, south, east, north]
minZoom?: number; // Minimum zoom level
maxZoom?: number; // Maximum zoom level
}
Best Practices
1. Use Appropriate Layer Types
typescript
// For point data
const points = createGeoJsonDataset({
name: 'Cities',
geojson: pointData,
type: 'point', // Use 'point' for individual locations
});
// For line data
const roads = createGeoJsonDataset({
name: 'Highways',
geojson: lineData,
type: 'line', // Use 'line' for roads, rivers, etc.
});
// For polygon data
const areas = createGeoJsonDataset({
name: 'Districts',
geojson: polygonData,
type: 'area', // Use 'area' for regions, districts, etc.
});
2. Optimize Raster Tiles
typescript
// Use appropriate zoom levels
const optimizedRaster = createRasterUrlDataset({
name: 'Optimized Raster',
tiles: ['https://example.com/tiles/{z}/{x}/{y}.png'],
minZoom: 3, // Don't load tiles below zoom 3
maxZoom: 15, // Don't load tiles above zoom 15
});
3. Set Appropriate Bounds
typescript
// Limit raster to specific geographic area
const regionalRaster = createRasterUrlDataset({
name: 'Regional Data',
tiles: ['https://example.com/tiles/{z}/{x}/{y}.png'],
bounds: [100, 10, 110, 20], // Only load tiles in this area
minZoom: 5,
maxZoom: 12,
});
4. Error Handling
typescript
try {
const dataset = createGeoJsonDataset({
name: 'My Dataset',
geojson: geojsonData,
type: 'point',
});
addDataset(dataset);
} catch (error) {
console.error('Failed to create dataset:', error);
}
Features
- One-line Dataset Creation - Create complete datasets with single function calls
- Multiple Data Sources - Support for GeoJSON and Raster data
- Automatic Styling - Default styling with optional customization
- Type Safety - Full TypeScript support
- Performance Optimized - Efficient dataset structure
- Easy Integration - Simple integration with map components
- Flexible Configuration - Customizable bounds, zoom levels, and styling