or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

addons.mdadvanced.mdcore-components.mddrawing.mdhocs.mdindex.mdlayers.mdplaces.mdshapes.mdvisualization.md

shapes.mddocs/

0

# Shape Overlays

1

2

Geometric shape components for drawing circles, polygons, polylines, and rectangles on Google Maps. These components support interactive editing, styling, and event handling.

3

4

## Capabilities

5

6

### Circle

7

8

Component for rendering circular overlays on the map with support for editing and customization.

9

10

```javascript { .api }

11

/**

12

* Circular overlay component

13

*/

14

class Circle extends Component<CircleProps> {

15

/** Returns the circle's bounds */

16

getBounds(): google.maps.LatLngBounds;

17

/** Returns the circle's center */

18

getCenter(): google.maps.LatLng;

19

/** Returns whether the circle is draggable */

20

getDraggable(): boolean;

21

/** Returns whether the circle is editable */

22

getEditable(): boolean;

23

/** Returns the circle's radius in meters */

24

getRadius(): number;

25

/** Returns whether the circle is visible */

26

getVisible(): boolean;

27

}

28

29

interface CircleProps {

30

// Default props

31

defaultCenter?: google.maps.LatLng | google.maps.LatLngLiteral;

32

defaultDraggable?: boolean;

33

defaultEditable?: boolean;

34

defaultOptions?: google.maps.CircleOptions;

35

defaultRadius?: number;

36

defaultVisible?: boolean;

37

38

// Controlled props

39

center?: google.maps.LatLng | google.maps.LatLngLiteral;

40

draggable?: boolean;

41

editable?: boolean;

42

options?: google.maps.CircleOptions;

43

radius?: number;

44

visible?: boolean;

45

46

// Event handlers

47

onCenterChanged?(): void;

48

onClick?(e: google.maps.MouseEvent): void;

49

onDrag?(e: google.maps.MouseEvent): void;

50

onDblClick?(e: google.maps.MouseEvent): void;

51

onDragEnd?(e: google.maps.MouseEvent): void;

52

onDragStart?(e: google.maps.MouseEvent): void;

53

onMouseDown?(e: google.maps.MouseEvent): void;

54

onMouseMove?(e: google.maps.MouseEvent): void;

55

onMouseOut?(e: google.maps.MouseEvent): void;

56

onMouseOver?(e: google.maps.MouseEvent): void;

57

onMouseUp?(e: google.maps.MouseEvent): void;

58

onRadiusChanged?(): void;

59

onRightClick?(e: google.maps.MouseEvent): void;

60

}

61

```

62

63

**Usage Example:**

64

65

```javascript

66

import { Circle } from "react-google-maps";

67

68

<GoogleMap defaultZoom={10} defaultCenter={{ lat: 37.7749, lng: -122.4194 }}>

69

<Circle

70

center={{ lat: 37.7749, lng: -122.4194 }}

71

radius={5000} // 5km radius

72

options={{

73

fillColor: "#ff0000",

74

fillOpacity: 0.35,

75

strokeColor: "#ff0000",

76

strokeOpacity: 0.8,

77

strokeWeight: 2,

78

}}

79

editable={true}

80

draggable={true}

81

onCenterChanged={() => {

82

console.log("Circle center changed");

83

}}

84

onRadiusChanged={() => {

85

console.log("Circle radius changed");

86

}}

87

/>

88

</GoogleMap>

89

```

90

91

### Polygon

92

93

Component for rendering polygonal shapes with support for multiple paths and holes.

94

95

```javascript { .api }

96

/**

97

* Polygonal overlay component

98

*/

99

class Polygon extends Component<PolygonProps> {

100

/** Returns whether the polygon is draggable */

101

getDraggable(): boolean;

102

/** Returns whether the polygon is editable */

103

getEditable(): boolean;

104

/** Returns the polygon's path (outer boundary) */

105

getPath(): google.maps.MVCArray<google.maps.LatLng>;

106

/** Returns all paths (including holes) */

107

getPaths(): google.maps.MVCArray<google.maps.MVCArray<google.maps.LatLng>>;

108

/** Returns whether the polygon is visible */

109

getVisible(): boolean;

110

}

111

112

interface PolygonProps {

113

// Default props

114

defaultDraggable?: boolean;

115

defaultEditable?: boolean;

116

defaultOptions?: google.maps.PolygonOptions;

117

defaultPath?: google.maps.MVCArray<google.maps.LatLng> | Array<google.maps.LatLng | google.maps.LatLngLiteral>;

118

defaultPaths?: google.maps.MVCArray<google.maps.MVCArray<google.maps.LatLng>> | google.maps.MVCArray<google.maps.LatLng> | Array<Array<google.maps.LatLng | google.maps.LatLngLiteral>> | Array<google.maps.LatLng | google.maps.LatLngLiteral>;

119

defaultVisible?: boolean;

120

121

// Controlled props

122

draggable?: boolean;

123

editable?: boolean;

124

options?: google.maps.PolygonOptions;

125

path?: google.maps.MVCArray<google.maps.LatLng> | Array<google.maps.LatLng | google.maps.LatLngLiteral>;

126

paths?: google.maps.MVCArray<google.maps.MVCArray<google.maps.LatLng>> | google.maps.MVCArray<google.maps.LatLng> | Array<Array<google.maps.LatLng | google.maps.LatLngLiteral>> | Array<google.maps.LatLng | google.maps.LatLngLiteral>;

127

visible?: boolean;

128

129

// Event handlers

130

onClick?(e: google.maps.PolyMouseEvent): void;

131

onDblClick?(e: google.maps.PolyMouseEvent): void;

132

onDrag?(e: google.maps.MouseEvent): void;

133

onDragEnd?(e: google.maps.MouseEvent): void;

134

onDragStart?(e: google.maps.MouseEvent): void;

135

onMouseDown?(e: google.maps.PolyMouseEvent): void;

136

onMouseMove?(e: google.maps.PolyMouseEvent): void;

137

onMouseOut?(e: google.maps.PolyMouseEvent): void;

138

onMouseOver?(e: google.maps.PolyMouseEvent): void;

139

onMouseUp?(e: google.maps.PolyMouseEvent): void;

140

onRightClick?(e: google.maps.PolyMouseEvent): void;

141

}

142

```

143

144

**Usage Example:**

145

146

```javascript

147

import { Polygon } from "react-google-maps";

148

149

const trianglePath = [

150

{ lat: 25.774, lng: -80.190 },

151

{ lat: 18.466, lng: -66.118 },

152

{ lat: 32.321, lng: -64.757 },

153

{ lat: 25.774, lng: -80.190 }

154

];

155

156

<GoogleMap defaultZoom={5} defaultCenter={{ lat: 24.886, lng: -70.268 }}>

157

<Polygon

158

path={trianglePath}

159

options={{

160

fillColor: "#ff0000",

161

fillOpacity: 0.35,

162

strokeColor: "#ff0000",

163

strokeOpacity: 0.8,

164

strokeWeight: 2,

165

}}

166

editable={true}

167

draggable={true}

168

onClick={(event) => {

169

console.log("Polygon clicked at vertex:", event.vertex);

170

}}

171

/>

172

</GoogleMap>

173

```

174

175

### Polyline

176

177

Component for rendering line paths on the map, commonly used for routes and boundaries.

178

179

```javascript { .api }

180

/**

181

* Polyline overlay component for drawing paths

182

*/

183

class Polyline extends Component<PolylineProps> {

184

/** Returns whether the polyline is draggable */

185

getDraggable(): boolean;

186

/** Returns whether the polyline is editable */

187

getEditable(): boolean;

188

/** Returns the polyline's path */

189

getPath(): google.maps.MVCArray<google.maps.LatLng>;

190

/** Returns whether the polyline is visible */

191

getVisible(): boolean;

192

}

193

194

interface PolylineProps {

195

// Default props

196

defaultDraggable?: boolean;

197

defaultEditable?: boolean;

198

defaultOptions?: google.maps.PolylineOptions;

199

defaultPath?: google.maps.MVCArray<google.maps.LatLng> | Array<google.maps.LatLng | google.maps.LatLngLiteral>;

200

defaultVisible?: boolean;

201

202

// Controlled props

203

draggable?: boolean;

204

editable?: boolean;

205

options?: google.maps.PolylineOptions;

206

path?: google.maps.MVCArray<google.maps.LatLng> | Array<google.maps.LatLng | google.maps.LatLngLiteral>;

207

visible?: boolean;

208

209

// Event handlers

210

onClick?(e: google.maps.PolyMouseEvent): void;

211

onDblClick?(e: google.maps.PolyMouseEvent): void;

212

onDrag?(e: google.maps.MouseEvent): void;

213

onDragEnd?(e: google.maps.MouseEvent): void;

214

onDragStart?(e: google.maps.MouseEvent): void;

215

onMouseDown?(e: google.maps.PolyMouseEvent): void;

216

onMouseMove?(e: google.maps.PolyMouseEvent): void;

217

onMouseOut?(e: google.maps.PolyMouseEvent): void;

218

onMouseOver?(e: google.maps.PolyMouseEvent): void;

219

onMouseUp?(e: google.maps.PolyMouseEvent): void;

220

onRightClick?(e: google.maps.PolyMouseEvent): void;

221

}

222

```

223

224

**Usage Example:**

225

226

```javascript

227

import { Polyline } from "react-google-maps";

228

229

const flightPath = [

230

{ lat: 37.772, lng: -122.214 },

231

{ lat: 21.291, lng: -157.821 },

232

{ lat: -18.142, lng: 178.431 },

233

{ lat: -27.467, lng: 153.027 }

234

];

235

236

<GoogleMap defaultZoom={3} defaultCenter={{ lat: 0, lng: -180 }}>

237

<Polyline

238

path={flightPath}

239

options={{

240

strokeColor: "#ff2527",

241

strokeOpacity: 0.75,

242

strokeWeight: 4,

243

}}

244

editable={true}

245

onClick={(event) => {

246

console.log("Polyline clicked at vertex:", event.vertex);

247

}}

248

/>

249

</GoogleMap>

250

```

251

252

### Rectangle

253

254

Component for rendering rectangular overlays on the map.

255

256

```javascript { .api }

257

/**

258

* Rectangular overlay component

259

*/

260

class Rectangle extends Component<RectangleProps> {

261

/** Returns the rectangle's bounds */

262

getBounds(): google.maps.LatLngBounds;

263

/** Returns whether the rectangle is draggable */

264

getDraggable(): boolean;

265

/** Returns whether the rectangle is editable */

266

getEditable(): boolean;

267

/** Returns whether the rectangle is visible */

268

getVisible(): boolean;

269

}

270

271

interface RectangleProps {

272

// Default props

273

defaultBounds?: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral;

274

defaultDraggable?: boolean;

275

defaultEditable?: boolean;

276

defaultOptions?: google.maps.RectangleOptions;

277

defaultVisible?: boolean;

278

279

// Controlled props

280

bounds?: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral;

281

draggable?: boolean;

282

editable?: boolean;

283

options?: google.maps.RectangleOptions;

284

visible?: boolean;

285

286

// Event handlers

287

onBoundsChanged?(): void;

288

onClick?(e: google.maps.MouseEvent): void;

289

onDblClick?(e: google.maps.MouseEvent): void;

290

onDrag?(e: google.maps.MouseEvent): void;

291

onDragEnd?(e: google.maps.MouseEvent): void;

292

onDragStart?(e: google.maps.MouseEvent): void;

293

onMouseDown?(e: google.maps.MouseEvent): void;

294

onMouseMove?(e: google.maps.MouseEvent): void;

295

onMouseOut?(e: google.maps.MouseEvent): void;

296

onMouseOver?(e: google.maps.MouseEvent): void;

297

onMouseUp?(e: google.maps.MouseEvent): void;

298

onRightClick?(e: google.maps.MouseEvent): void;

299

}

300

```

301

302

**Usage Example:**

303

304

```javascript

305

import { Rectangle } from "react-google-maps";

306

307

const rectangleBounds = {

308

north: 33.685,

309

south: 33.671,

310

east: -116.234,

311

west: -116.251,

312

};

313

314

<GoogleMap defaultZoom={13} defaultCenter={{ lat: 33.678, lng: -116.243 }}>

315

<Rectangle

316

bounds={rectangleBounds}

317

options={{

318

fillColor: "#ff0000",

319

fillOpacity: 0.35,

320

strokeColor: "#ff0000",

321

strokeOpacity: 0.8,

322

strokeWeight: 2,

323

}}

324

editable={true}

325

draggable={true}

326

onBoundsChanged={() => {

327

console.log("Rectangle bounds changed");

328

}}

329

/>

330

</GoogleMap>

331

```

332

333

## Common Shape Styling Options

334

335

All shape components support common styling through the `options` prop:

336

337

```javascript

338

const shapeOptions = {

339

fillColor: "#ff0000", // Fill color

340

fillOpacity: 0.35, // Fill opacity (0-1)

341

strokeColor: "#ff0000", // Border color

342

strokeOpacity: 0.8, // Border opacity (0-1)

343

strokeWeight: 2, // Border width in pixels

344

clickable: true, // Whether shape responds to mouse events

345

editable: false, // Whether shape can be edited

346

draggable: false, // Whether shape can be dragged

347

visible: true, // Whether shape is visible

348

zIndex: 1 // Stacking order

349

};

350

```

351

352

## Interactive Editing

353

354

Enable interactive editing by setting `editable={true}`:

355

356

```javascript

357

<Polygon

358

path={polygonPath}

359

editable={true}

360

onMouseUp={() => {

361

// Handle edit completion

362

const updatedPath = polygon.getPath().getArray();

363

savePolygonPath(updatedPath);

364

}}

365

/>

366

```