0.3.0 • Published 4 months ago

react-ol-choropleth v0.3.0

Weekly downloads
-
License
MIT
Repository
github
Last release
4 months ago

React OpenLayers Choropleth

A lightweight React component for creating interactive choropleth maps using OpenLayers. Create beautiful, responsive geographic visualizations with customizable color scales, interactive tooltips, and dynamic legends. Built with TypeScript and modern React practices.

Installation

npm install react-ol-choropleth

Basic Usage

import { ChoroplethMap } from "react-ol-choropleth";
import "react-ol-choropleth/style.css";

function App() {
  const geoData = {
    type: "FeatureCollection",
    features: [
      // Your GeoJSON features with properties like id, name, value
    ],
  };

  return (
    <ChoroplethMap
      // Required props
      data={geoData}
      valueProperty="population" // Property name in your GeoJSON features
      // Color scale configuration
      colorScale={{
        type: "sequential", // 'sequential' | 'diverging' | 'categorical'
        colors: ["#feedde", "#fdbe85", "#fd8d3c", "#e6550d", "#a63603"],
      }}
      // Map configuration
      zoom={4}
      baseMap="osm" // 'osm' | 'satellite' | 'none'
      // Legend configuration
      showLegend={true}
      legendPosition="top-right" // 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left'
      // Interaction options
      zoomToFeature={true}
      selectedFeatureBorderColor="#0099ff" // Color for highlighting selected/hovered features
      canZoomOutBoundaries={true} // Whether to allow zooming beyond data boundaries
      // Custom overlay configuration (optional)
      overlayOptions={{
        // When to show the overlay: 'click' or 'hover'
        trigger: "click",
        // Custom render function (optional)
        render: (feature) => (
          <div>
            <h3>{feature.get("name")}</h3>
            <p>Population: {feature.get("population").toLocaleString()}</p>
          </div>
        ),
        // If render is not provided, it will show all feature properties by default
        autoPan: true, // Auto pan map to show overlay when feature is clicked/hovered
      }}
      // Event handlers
      onFeatureClick={(feature, coordinate) => {
        if (feature) {
          console.log("Clicked:", {
            name: feature.get("name"),
            value: feature.get("population"),
            coordinate,
          });
        }
      }}
      onFeatureHover={(feature) => {
        if (feature) {
          console.log("Hovering:", feature.get("name"));
        }
      }}
    />
  );
}

Props

PropTypeDescriptionDefault
dataGeoJSON \| Feature[]GeoJSON data or array of OpenLayers features-
valuePropertystringProperty name to use for coloring features-
colorScaleColorScaleColor scale configuration-
zoomnumberInitial zoom level2
showLegendbooleanWhether to show the legendtrue
legendPositionLegendPositionLegend position"top-right"
baseMap"osm" \| "satellite" \| "none"Base map layer type"osm"
zoomToFeaturebooleanAuto-zoom on feature clickfalse
selectedFeatureBorderColorstringSelected/hovered feature highlight color"#0099ff"
canZoomOutBoundariesbooleanAllow zooming beyond data boundariestrue
overlayOptionsOverlayOptions \| falseCustom overlay configurationSee below
onFeatureClick(feature: Feature \| null, coordinate?: [number, number]) => voidClick event handler-
onFeatureHover(feature: Feature \| null) => voidHover event handler-

Default Overlay Options

{
  render: undefined, // Will show all feature properties if not provided
  trigger: "click", // "click" or "hover"
  autoPan: true,
}

Feature Highlighting

Features can be highlighted in two ways:

  1. On click - Selected features get a 3px border with the selectedFeatureBorderColor
  2. On hover - Hovered features get a 2px border with the same selectedFeatureBorderColor

The overlay display is controlled by the overlayOptions.trigger property, which can be set to either "click" or "hover".

Demo

Check out the live demo to see it in action.

License

MIT © Abdulrhman El-Saed

0.3.0

4 months ago

0.2.3

4 months ago

0.2.2

4 months ago

0.2.1

4 months ago

0.2.0

4 months ago

0.1.3

4 months ago

0.1.2

4 months ago

0.1.0

4 months ago

0.0.26

4 months ago

0.0.25

4 months ago

0.0.24

4 months ago

0.0.23

4 months ago

0.0.22

4 months ago

0.0.21

4 months ago

0.0.19

4 months ago

0.0.18

4 months ago

0.0.17

4 months ago

0.0.16

4 months ago

0.0.15

4 months ago

0.0.13

4 months ago

0.0.12

4 months ago

0.0.11

4 months ago

0.0.10

4 months ago

0.0.9

4 months ago

0.0.8

4 months ago

0.0.7

4 months ago

0.0.6

4 months ago

0.0.5

4 months ago

0.0.5-beta.3

4 months ago

0.0.5-beta.2

4 months ago

0.0.5-beta.1

4 months ago

0.0.4

4 months ago

0.0.3

4 months ago

0.0.2

4 months ago

0.0.1

4 months ago