UNPKG

7.59 kBMarkdownView Raw
1# Google Map React · [![npm version](https://badge.fury.io/js/google-map-react.svg)](http://badge.fury.io/js/google-map-react) [![Build Status](https://travis-ci.org/google-map-react/google-map-react.svg?branch=master)](https://travis-ci.org/google-map-react/google-map-react) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](github.com/google-map-react/google-map-react/CONTRIBUTING.md)
2
3`google-map-react` is a component written over a small set of the [Google Maps API](https://developers.google.com/maps/). It allows you to render any React component on the Google Map. It is fully isomorphic and can render on a server. Additionally, it can render map components in the browser even if the Google Maps API is not loaded. It uses an internal, tweakable hover algorithm - every object on the map can be hovered.
4
5It allows you to create interfaces like this [example](http://google-map-react.github.io/google-map-react/map/main) *(You can scroll the table, zoom/move the map, hover/click on markers, and click on table rows)*
6
7## Getting started
8
9In the simple case you just need to add `lat` and `lng` props to any child of `GoogleMapReact` component.
10
11[See it in action at jsbin](https://jsbin.com/ruwogapuke/1/edit?js,output)
12
13```javascript
14import React, { Component } from 'react';
15import GoogleMapReact from 'google-map-react';
16
17const AnyReactComponent = ({ text }) => <div>{text}</div>;
18
19class SimpleMap extends Component {
20 static defaultProps = {
21 center: {
22 lat: 59.95,
23 lng: 30.33
24 },
25 zoom: 11
26 };
27
28 render() {
29 return (
30 // Important! Always set the container height explicitly
31 <div style={{ height: '100vh', width: '100%' }}>
32 <GoogleMapReact
33 bootstrapURLKeys={{ key: /* YOUR KEY HERE */ }}
34 defaultCenter={this.props.center}
35 defaultZoom={this.props.zoom}
36 >
37 <AnyReactComponent
38 lat={59.955413}
39 lng={30.337844}
40 text="My Marker"
41 />
42 </GoogleMapReact>
43 </div>
44 );
45 }
46}
47
48export default SimpleMap;
49```
50
51### My map doesn't appear!
52
53- Make sure the container element has width and height. The map will try to fill the parent container, but if the container has no size, the map will collapse to 0 width / height. This is not a requirement for google-map-react, [its a requirement for google-maps in general](https://developers.google.com/maps/documentation/javascript/tutorial).
54
55
56## Installation
57
58npm:
59```
60npm install --save google-map-react
61```
62
63yarn:
64```
65yarn add google-map-react
66```
67
68## Features
69
70### Works with your Components
71
72Instead of the default Google Maps markers, balloons and other map components, you can render your cool animated react components on the map.
73
74### Isomorphic Rendering
75
76It renders on the server. *(Welcome search engines)* *(you can disable javascript in browser dev tools, and reload any example page to see how it works)*
77
78### Component Positions Calculated Independently of Google Maps API
79
80It renders components on the map before (and even without) the Google Maps API loaded.
81
82### Google Maps API Loads on Demand
83
84There is no need to place a `<script src=` tag at top of page. The Google Maps API loads upon the first usage of the `GoogleMapReact` component.
85
86### Use Google Maps API
87
88You can access to Google Maps `map` and `maps` objects by using `onGoogleApiLoaded`, in this case you will need to set `yesIWantToUseGoogleMapApiInternals` to `true`
89
90```javascript
91...
92
93const handleApiLoaded = (map, maps) => {
94 // use map and maps objects
95};
96
97...
98
99<GoogleMapReact
100 bootstrapURLKeys={{ key: /* YOUR KEY HERE */ }}
101 defaultCenter={this.props.center}
102 defaultZoom={this.props.zoom}
103 yesIWantToUseGoogleMapApiInternals
104 onGoogleApiLoaded={({ map, maps }) => handleApiLoaded(map, maps)}
105>
106 <AnyReactComponent
107 lat={59.955413}
108 lng={30.337844}
109 text="My Marker"
110 />
111</GoogleMapReact>
112```
113
114PST: Remember to set `yesIWantToUseGoogleMapApiInternals` to true.
115
116[Example here](https://github.com/google-map-react/google-map-react-examples/blob/master/src/examples/Main.js#L69)
117
118### Internal Hover Algorithm
119
120Now every object on the map can be hovered (however, you can still use css hover selectors if you want). If you try zooming out here [example](http://google-map-react.github.io/google-map-react/map/main), you will still be able to hover on almost every map marker.
121
122## Examples
123
124* Placing react components on the map:
125[simple](http://google-map-react.github.io/google-map-react/map/simple/) ([source](https://github.com/google-map-react/old-examples/blob/master/web/flux/components/examples/x_simple/simple_map_page.jsx))
126
127* Custom map options:
128[example](http://google-map-react.github.io/google-map-react/map/options/) ([source](https://github.com/google-map-react/old-examples/blob/master/web/flux/components/examples/x_options/options_map_page.jsx))
129
130* Hover effects:
131[simple hover](http://google-map-react.github.io/google-map-react/map/simple_hover/) ([source](https://github.com/google-map-react/old-examples/blob/master/web/flux/components/examples/x_simple_hover/simple_hover_map_page.jsx));
132[distance hover](http://google-map-react.github.io/google-map-react/map/distance_hover/) ([source](https://github.com/google-map-react/old-examples/blob/master/web/flux/components/examples/x_distance_hover/distance_hover_map_page.jsx))
133
134* GoogleMap events:
135[example](http://google-map-react.github.io/google-map-react/map/events/) ([source](https://github.com/google-map-react/old-examples/blob/master/web/flux/components/examples/x_events/events_map_page.jsx))
136
137* Example project:
138[main](http://google-map-react.github.io/google-map-react/map/main/) ([source](https://github.com/google-map-react/old-examples/blob/master/web/flux/components/examples/x_main/main_map_block.jsx)); [balderdash](http://google-map-react.github.io/google-map-react/map/balderdash/) (same source as main)
139
140* Clustering example (**new**: [source](https://github.com/istarkov/google-map-clustering-example))
141[google-map-clustering-example](http://istarkov.github.io/google-map-clustering-example/)
142
143* How to render thousands of markers (**new**: [source](https://github.com/istarkov/google-map-thousands-markers))
144[google-map-thousands-markers](https://istarkov.github.io/google-map-thousands-markers/)
145
146* Examples:
147[Examples](https://github.com/google-map-react/google-map-react-examples)
148[Old examples](https://github.com/google-map-react/old-examples)
149
150* jsbin example
151[jsbin example](https://jsbin.com/ruwogapuke/1/edit?js,output)
152
153* webpackbin examples (**new**)
154[docs with webpackbin examples](./DOC.md) (In progress)
155
156* local develop example (new)
157[develop example](./develop)
158
159## Documentation
160
161You can find the documentation here:
162
163- [API Reference](./API.md)
164
165- [NEW DOCS](./DOC.md) (In progress)
166
167## Contribute
168
169To get a reloadable env, with map, clone this project and
170
171```shell
172npm install
173npm run start
174# open browser at localhost:4000
175```
176
177## Thank you
178
179(*Really big thanks to [April Arcus](https://github.com/AprilArcus) for documentation fixes*)
180
181(*thank you [Dan Abramov](http://gaearon.github.io/react-dnd/) for titles structure*)
182
183(*great thanks to [Vladimir Akimov](https://github.com/b2whats) he knows why*)
184
185## License
186
187MIT (http://www.opensource.org/licenses/mit-license.php)
188
189## Known Issues
190
191* Older browsers (http://caniuse.com/#feat=promises) will need a ES6 Promise polyfill in order to work.
192
193## !!! We are looking for contributors
194We're actively looking for contributors, please send a message to the Owner or any of the Collaborators.