Markers & Infowindows

A basic Google Map with default Zoom and Center.

Basic Marker

import { Marker } from 'solid-google-maps'
<Marker
  position={{ lat: 10, lng: 10 }}
  clickable={true}
  onClick={() => alert('marker was clicked!')}
  title={'clickable google.maps.Marker'}
/>

Customized Pin

import { AdvancedMarker, Pin } from 'solid-google-maps'
<AdvancedMarker position={{ lat: 20, lng: 10 }} title={'AdvancedMarker with customized pin.'}>
  <Pin background={'#22ccff'} borderColor={'#1e89a1'} glyphColor={'#0f677a'}></Pin>
</AdvancedMarker>

HTML Marker

<AdvancedMarker position={{ lat: 30, lng: 10 }} title={'AdvancedMarker with custom html content.'}>
  <div
    style={{
      width: '16px',
      height: '16px',
      position: 'absolute',
      top: 0,
      left: 0,
      background: '#1dbe80',
      border: '2px solid #0e6443',
      'border-radius': '50%',
      transform: 'translate(-50%, -50%)',
    }}
  ></div>
</AdvancedMarker>

Infowindow

Standalone

An InfoWindow can be added directly to the map and controlled via the open prop

import { Map, InfoWindow } from 'solid-google-maps'
 
const MyMap: Component = () => {
  const [open, setOpen] = createSignal(true)
 
  return (
    <Map
      style={{ height: '500px', width: '100%' }}
      defaultZoom={3}
      defaultCenter={{ lat: 22.54992, lng: 0 }}
      gestureHandling={'greedy'}
      disableDefaultUI={true}
    >
      <InfoWindow position={{ lat: 22.54992, lng: 0 }} maxWidth={200} open={open()} onOpenChange={setOpen}>
        <p>
          This is the content for another infowindow with <em>HTML</em>
          -elements.
        </p>
      </InfoWindow>
    </Map>
  )
}

Anchored

An InfoWindow can be anchored to a Marker by setting its anchor prop. This is a performant was to share one InfoWindow between many markers.

Anchored as Child

An InfoWindow can be anchored to a Marker by adding it as a child of the Marker.

import { Map, InfoWindow } from 'solid-google-maps'
 
const MyMap: Component = () => {
  const [open, setOpen] = createSignal(true)
 
  return (
    <Map
      style={{ height: '500px', width: '100%' }}
      defaultZoom={3}
      defaultCenter={{ lat: 22.54992, lng: 0 }}
      gestureHandling={'greedy'}
      disableDefaultUI={true}
    >
      <AdvancedMarker position={{ lat: 22.54992, lng: 0 }}>
        <InfoWindow maxWidth={200}>
          <p>
            This is the content for another infowindow with <em>HTML</em>
            -elements.
          </p>
        </InfoWindow>
      </AdvancedMarker>
    </Map>
  )
}

Controlled Marker position

import { createSignal } from 'solid-js'
import { Marker } from 'solid-google-maps'
const [position, setPosition] = createSignal({ lat: 50, lng: 10 })
 
<Marker
  position={position()}
/>

Marker with Infowindow

import { AdvancedMarker, InfoWindow } from 'solid-google-maps'
const [infoWindowOpen, setInfoWindowOpen] = createSignal(false)
 
<AdvancedMarker
  position={{ lat: 60, lng: 10 }}
  onClick={() => setInfoWindowOpen(!infoWindowOpen())}
>
  <InfoWindow open={infoWindowOpen()} onOpenChange={setInfoWindowOpen}>
    This is the content for an infowindow.
  </InfoWindow>
</AdvancedMarker>