如何使用React JS将FusionTablesLayer放入Google Maps API?

时间:2017-11-30 18:48:52

标签: javascript reactjs google-maps

我有一个疑问,我使用ReactJS来分离模块,我有一个名为InitialMap的类,我将其导出到app.js:

import React from 'react';
import loadGoogleMapsAPI from 'load-google-maps-API';

const MAP_STYLES = {
    height: '450px',
    width: '100%'

}

const OPTIONS = {
    center: {
        lat: 41.850033,
        lng: -87.6500523
    },
    zoom: 13,

}

const API_CONFIG = {
    key:'My_Key xxxxxxx',
    language: 'en'
}

export default class InitialMap extends React.Component{
    componentWillUnmount() {

        const allScripts = document.getElementsByTagName( 'script' );

        [].filter.call(
            allScripts,
            ( scpt ) => scpt.src.indexOf( 'My_Key xxxxxxx' ) >= 0
        )[ 0 ].remove();

        window.google = {};


    }

    componentDidMount() {

        loadGoogleMapsAPI( API_CONFIG ).then( googleMaps => {
            new googleMaps.Map( this.refs.map, OPTIONS  );
        }).catch( err => {
            console.warning( 'Something went wrong loading the map', err );
        });

    }

    render() {
        return (
            <div id="page-wrapper">
                <div id= "page-header">
                    <div ref="map" style={MAP_STYLES}>

                    </div>
                </div>
            </div>
        )
    }
}

地图显示在屏幕上,但我需要放置标记!

问题在于我不知道如何使用Fusion Tables图层来使用标记,例如由Google显示红点!

仅使用脚本文件+ index.html <div id="map"><div>中的id它正在运行,但我需要将其用于特定的React模块,并在app.js文件中调用它。 在Google的文档中就是这样的一个例子:

    function initMap() {
  var map = new google.maps.Map(document.getElementById('map'), {
    center: {lat: 41.850033, lng: -87.6500523},
    zoom: 11
  });

  var layer = new google.maps.FusionTablesLayer({
    query: {
      select: '\'Geocodable address\'',
      from: '1mZ53Z70NsChnBMm-qEYmSDOvLXgrreLTkQUvvg'
    }
  });
  layer.setMap(map);
}
在我的代码中

(我需要放置这个var层!!!)

如果有人可以提供帮助,我会很感激! PS:我是React JS的新手!

1 个答案:

答案 0 :(得分:0)

如果您在页面上加载API,它应该以完全相同的方式工作,只需在创建时将您的地图实例保存在您的课程中,然后您就可以在其他调用中使用它。

    loadGoogleMapsAPI( API_CONFIG ).then( googleMaps => {
        this.map = new googleMaps.Map( this.refs.map, OPTIONS  );

        var layer = new google.maps.FusionTablesLayer({
          query: {
            select: '\'Geocodable address\'',
            from: '1mZ53Z70NsChnBMm-qEYmSDOvLXgrreLTkQUvvg'
          }
        });
        layer.setMap(this.map);
    }).catch( err => {
        console.warning( 'Something went wrong loading the map', err );
    });