- 
                            Data Grids / Data Management- 
                Data Grid- Overview
- 
                Data Binding
- 
                Filtering
- Sorting
- 
                Editing
- 
                Grouping
- 
                Selection
- Focused Row
- Paging
- 
                Scrolling
- 
                Columns
- 
                Master-Detail
- 
                Data Summaries
- 
                Drag & Drop
- 
                Export to PDF
- 
                Export to Excel
- Appearance
- 
                Customization
- State Persistence
- 
                Adaptability
- 
                Keyboard Navigation
- Right-To-Left Support
 
- 
                Tree List- Overview
- 
                Data Binding
- 
                Filtering
- Sorting
- 
                Editing
- 
                Selection
- Focused Row
- Paging
- 
                Columns
- Drag & Drop
- State Persistence
- Adaptability
- 
                Keyboard Navigation
 
- 
                Card View
- 
                Pivot Grid- Overview
- 
                Data Binding
- 
                Field Management
- 
                Data Summaries
- Drill Down
- Filtering
- 
                Scrolling
- 
                Export to Excel
- Chart Integration
- Customization
- State Persistence
 
- 
                Filter Builder
 
- 
                
- 
                            Data Visualization- 
                Charts- Overview
- 
                Data Binding
- 
                Common Concepts- 
                Axis
- 
                Aggregation
- 
                Tooltips
- 
                Selection
- 
                Customization
- 
                Zooming
- 
                Export
 
- 
                
- 
                Area Charts
- 
                Bar Charts
- Bullet Charts
- 
                Doughnut Charts
- 
                Financial Charts
- 
                Funnel and Pyramid Charts
- 
                Line Charts
- Pareto Chart
- 
                Pie Charts
- 
                Point Charts
- 
                Polar and Radar Charts
- 
                Range Charts
- Sankey Chart
- 
                Sparkline Charts
- 
                Tree Map
 
- 
                Gauges- Overview
- 
                Runtime update
- 
                Bar Gauge
- 
                Circular Gauge
- 
                Linear Gauge
 
- 
                Diagram- Overview
- 
                Data Binding
- 
                Featured Shapes
- 
                Custom Shapes
- 
                Document Capabilities
- 
                User Interaction
- UI Customization
- Adaptability
 
 
- 
                
- 
                            Scheduling / Planning- 
                Scheduler- Overview
- 
                Data Binding
- 
                Views
- 
                Appointments
- 
                Timetable
- Editing
- 
                Grouping
- Virtual Scrolling
- Drag & Drop
- 
                Customization
- Adaptability
 
- 
                Gantt- Overview
- Data Binding
- 
                Filtering
- Sorting
- Strip Lines
- Export to PDF
- Validation
- 
                Customization
 
 
- 
                
- 
                            Messaging
- 
                            WYSIWYG Editor
- 
                            Forms
- 
                            Data Editors- Overview
- 
                Common Concepts
- 
                Calendar
- Check Box
- Color Box
- 
                Date Box
- 
                Date Range Box
- 
                Number Box
- Radio Group
- 
                Range Selector
- Range Slider
- Slider
- Speech To Text
- Switch
- Text Area
- Text Box
 
- 
                            Drop-Downs- Autocomplete
- 
                Drop Down Box
- 
                Select Box
- 
                Tag Box
- 
                Lookup
 
- 
                            Buttons
- 
                            File Upload / File Management- 
                File Manager- Overview
- 
                File System Types
- 
                Customization
 
- 
                File Uploader
 
- 
                
- 
                            Popup and Notifications
- 
                            Navigation- Overview
- Accordion
- 
                Action Sheet
- 
                Context Menu
- 
                Menu
- Multi View
- 
                Drawer
- 
                Tab Panel
- 
                Tabs
- 
                Toolbar
- 
                Stepper
- Pagination
- 
                List
- 
                Tree View
- Right-to-Left Support
 
- 
                            Layout
- 
                            Interactive Wrappers- 
                Sortable
- Resizable
 
- 
                
- 
                            Progress Indicators
- 
                            Maps- Overview
- 
                Map
- 
                Vector Map- 
                Data Binding
- Multiple Layers
- 
                Markers
- Legend
- 
                Zooming and Panning
- 
                Customization
 
- 
                
 
- 
                            Localization
Related Demos:
        
            Your search did not match any results.
        
    JavaScript/jQuery Vector Map - Custom Projection
This demo illustrates how to implement a custom projection. To do it, set the aspectRatio, to, and from properties. The Wagner-VI projection is used in this example.
            
            Backend API
        
    $(() => {
  const RADIANS = Math.PI / 180;
  const WAGNER_6_P_LAT = Math.PI / Math.sqrt(3);
  const WAGNER_6_U_LAT = 2 / Math.sqrt(3) - 0.1;
  const customProjection = {
    aspectRatio: 2,
    to(coordinates) {
      const x = coordinates[0] * RADIANS;
      const y = Math.min(Math.max(coordinates[1] * RADIANS, -WAGNER_6_P_LAT), +WAGNER_6_P_LAT);
      const t = y / Math.PI;
      return [
        (x / Math.PI) * Math.sqrt(1 - 3 * t * t),
        (y * 2) / Math.PI,
      ];
    },
    from(coordinates) {
      const x = coordinates[0];
      const y = Math.min(Math.max(coordinates[1], -WAGNER_6_U_LAT), +WAGNER_6_U_LAT);
      const t = y / 2;
      return [
        (x * Math.PI) / Math.sqrt(1 - 3 * t * t) / RADIANS,
        (y * Math.PI) / 2 / RADIANS,
      ];
    },
  };
  $('#vector-map').dxVectorMap({
    projection: customProjection,
    title: 'Wagner VI projection',
    export: {
      enabled: true,
    },
    layers: [{
      dataSource: DevExpress.viz.map.sources.world,
    }, {
      color: '#aaa',
      borderWidth: 1,
      hoverEnabled: false,
      dataSource: coordLinesData,
    }],
  });
});
    
    <!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
  <head>
    <title>DevExtreme Demo</title>
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5.0" />
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>window.jQuery || document.write(decodeURIComponent('%3Cscript src="js/jquery.min.js"%3E%3C/script%3E'))</script>
    <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/25.1.6/css/dx.light.css" />
    <script src="js/dx.all.js?v=25.1.6"></script>
    <script src="https://cdn3.devexpress.com/jslib/25.1.6/js/vectormap-data/world.js"></script>
    <script src="https://cdn3.devexpress.com/jslib/25.1.6/js/vectormap-data/africa.js"></script>
    <script src="https://cdn3.devexpress.com/jslib/25.1.6/js/vectormap-data/canada.js"></script>
    <script src="https://cdn3.devexpress.com/jslib/25.1.6/js/vectormap-data/eurasia.js"></script>
    <script src="https://cdn3.devexpress.com/jslib/25.1.6/js/vectormap-data/europe.js"></script>
    <script src="https://cdn3.devexpress.com/jslib/25.1.6/js/vectormap-data/usa.js"></script>
    <script src="data.js"></script>
    <link rel="stylesheet" type="text/css" href="styles.css" />
    <script src="index.js"></script>
  </head>
  <body class="dx-viewport">
    <div class="demo-container">
      <div id="vector-map"></div>
    </div>
  </body>
</html>
    
    #vector-map {
  height: 400px;
}
    
    const coordLinesData = {
  type: 'FeatureCollection',
  features: [],
};
let longitude;
let latitude;
// add meridians
for (longitude = -180; longitude <= 180; longitude += 30) {
  const lineCoords = [];
  for (latitude = -90; latitude <= 90; latitude += 5) {
    lineCoords.push([longitude, latitude]);
  }
  coordLinesData.features.push({
    geometry: {
      type: 'LineString',
      coordinates: lineCoords,
    },
  });
}
// add parallels
for (latitude = -90; latitude <= 90; latitude += 30) {
  coordLinesData.features.push({
    geometry: {
      type: 'LineString',
      coordinates: [[-180, latitude], [180, latitude]],
    },
  });
}