It is a Vue 3 port of the Vue port of the javascript-based DataMaps
# project clone
$ git clone https://github.com/insky/vue3-datamaps.git
# install dependencies
$ npm install
# run
$ npm run dev# install
$ npm install vue3-datamaps- json data is no longer required.
- CSS styles must be imported separately
main.js
import { createApp } from 'vue'
import VueDatamaps from 'vue3-datamaps'
import 'vue3-datamaps/style.css'
const app = createApp(App)
app.use(VueDatamaps)
app.mount('#app')vue template
<template>
<div id="app">
<vue-datamaps />
</div>
</template>vue template
<template>
<div id="app">
<vue-datamaps />
</div>
</template>
<script setup>
import { VueDatamaps } from 'vue3-datamaps'
import 'vue3-datamaps/style.css'
</script><template>
<div>
<h4>Basic:</h4>
<vue-datamaps />
</div>
</template>
<script setup>
import { VueDatamaps } from 'vue3-datamaps'
</script>
- type: String
- value: world, usa, custom_map
Same as the original.
- type: Function
- value: See sample code.
Same as original but d3 version different.
- type: String
- value: Equirectangular, Orthographic, Mercator
Same as original but PascalCase.
- type: String
- value json, csv
Same as original.
- type: Object
- value: See sample code.
Same as original.
- type: Function
Not implemented.
- type: Object
- value: The keys in this object map to the "fillKey" of [data] or [data of bubbles]
Same as original.
- type: Object
- value: See sample code.
Same as original but not include popupTemplate.
- type: Object
- value: See sample code.
Same as original but not include popupTemplate.
- type: Boolean
- value: true, false
If
bubblesConfigrequired.
- type: Object
- value: See sample code.
Same as original but not include popupTemplate.
- type: Boolean
- value: true, false
If arcConfig required.
- type: Boolean
- value: true, false
Not implemented.
- type: Object
- value: See sample code.
Same as original.
- type: Boolean
- value: true, false
If labelsConfig required.
- type: Boolean
- value: true, false
If slot hoverinfo and event custom:popup||custom:popup-bubble||custom:popup-arc||custom:popup-region|| required.
{
scope: 'world',
setProjection: (d3, element) => {
let projection = null
let path = null
if (this.scope === 'usa') {
projection = d3.geoAlbersUsa()
.scale(this.svgWidth)
.translate([this.svgWidth / 2, this.svgHeight / 2])
} else if (this.scope === 'world') {
projection = d3[`geo${this.projection}`]()
.scale((this.svgWidth + 1) / 2 / Math.PI)
.translate([this.svgWidth / 2, this.svgHeight / (this.projection === 'Mercator' ? 1.45 : 1.8)])
}
if (this.projection === 'Orthographic') {
this.svg.append('defs').append('path')
.datum({ type: 'Sphere' })
.attr('id', 'sphere')
.attr('d', path)
this.svg.append('use')
.attr('class', 'stroke')
.attr('xlink:href', '#sphere')
this.svg.append('use')
.attr('class', 'fill')
.attr('xlink:href', '#sphere')
projection.scale(this.svgWidth / Math.PI * 0.9).clipAngle(90).rotate(this.projectionConfigOptions.rotation)
}
path = d3.geoPath()
.projection(projection)
return { projection, path }
},
projection: 'Equirectangular',
dataType: 'json',
data: {},
done: function () {
return {}
},
fills: {
authorHasTraveledTo: '#fa0fa0',
defaultFill: '#ABDDA4'
},
geographyConfig: {
dataUrl: null,
hideAntarctica: true,
hideHawaiiAndAlaska: false,
borderWidth: 1,
borderOpacity: 1,
borderColor: '#FDFDFD',
popupOnHover: true,
highlightOnHover: true,
highlightFillColor: '#FC8D59',
highlightBorderColor: 'rgba(250, 15, 160, 0.2)',
highlightBorderWidth: 2,
highlightBorderOpacity: 1,
highlightFillOpacity: 0.85
},
projectionConfig: {
rotation: [97, 0]
},
bubblesConfig: {
borderWidth: 2,
borderOpacity: 1,
borderColor: '#FFFFFF',
popupOnHover: true,
radius: null,
fillOpacity: 0.75,
animate: true,
highlightOnHover: true,
highlightFillColor: '#FC8D59',
highlightBorderColor: 'rgba(250, 15, 160, 0.2)',
highlightBorderWidth: 2,
highlightBorderOpacity: 1,
highlightFillOpacity: 0.85,
exitDelay: 100,
key: JSON.stringify,
data: []
},
bubbles: false,
arcConfig: {
strokeColor: '#DD1C77',
strokeWidth: 1,
arcSharpness: 1,
animationSpeed: 600,
popupOnHover: false,
data: []
},
arc: false,
disableDefaultStyles: false,
labelsConfig: {
fontSize: 10,
fontFamily: 'Verdana',
labelColor: '#000',
lineWidth: 1
},
labels: false,
popupTemplate: false,
awsRegions: false,
awsRegionsConfig: {
strokeColor: '#0b5fd6',
strokeWidth: 1.5,
defaultFill: 'transparent',
highlightFillOpacity: 1,
showPrivateRegions: false,
popupOnHover: false,
data: []
}
}- when geography mouse hover:
- slot:
hoverinfo - event:
custom:popup
- slot:
<template #hoverinfo>
<div class="hoverinfo" style="text-align:center;">
<!-- ... -->
</div>
</template>- when bubbles mouse hover:
- slot:
hoverBubbleInfo - event:
custom:popup-bubble
- slot:
<template #hoverBubbleInfo>
<div class="hoverinfo" style="text-align:center;">
<!-- ... -->
</div>
</template>- when arc mouse hover:
- slot:
hoverArcInfo - event:
custom:popup-arc
- slot:
<template #hoverArcInfo>
<div class="hoverinfo" style="text-align:center;">
<!-- ... -->
</div>
</template>-
when aws-region mouse hover
- slot:
hoverRegionInfo - event:
custom:popup-region
- slot:
<template #hoverRegionInfo>
<div class="hoverinfo" style="text-align:center;">
<!-- ... -->
</div>
</template>- markmarkoh/datamaps - original
- Seungwoo321/vue-datamaps - Vue 2 port
MIT