我试图在谷歌Map上显示一系列位置的多个大头针。下面的代码只适用于一个位置,但是当使用多个位置时,大头针和标签会重叠,Map会显示为灰色。不知道我做错了什么,但欢迎提供指导
Map.jsx
import React from "react";
import GoogleMapReact from "google-map-react";
import LocationPin from "./LocationPin";
const Map = ({ location, zoomLevel }) => (
<div className="map">
<div className="w-full h-[60vh]">
<GoogleMapReact
bootstrapURLKeys={{ key: process.env.REACT_APP_GOOGLE_MAPS_TOKEN }}
defaultCenter={location}
defaultZoom={zoomLevel}
options={{ disableDefaultUI: false, zoomControl: true }}
>
{ location.map((location, index) => (
<LocationPin
lat={location.lat}
lng={location.lng}
text={location.address}
key={index}
/>
))}
</GoogleMapReact>
</div>
</div>
);
export default Map;
Locations.jsx
import React from 'react';
import Map from "../components/Map";
export const Locations = () => {
const locations = [{
address: "Sonoma, California, USA",
lat: 38.208473,
lng: -122.451803,
},{
address: "San Francisco, California, USA",
lat: 37.773972,
lng: -122.431297,
}];
return (
<div className="w-full">
<div className="mt-4">
<Map location={locations} zoomLevel={15} />
</div>
</div>
);
}
export default Locations;
LocationPin.jsx
import locationIcon from "@iconify/icons-mdi/map-marker";
const LocationPin = ({ text }) => (
<div className="flex items-center w-[180px] text-[#00009E]">
<Icon icon={locationIcon} className="text-6xl" />
<p className="text-sm">{text}</p>
</div>
);
export default LocationPin;
1条答案
按热度按时间k0pti3hp1#
问题似乎出在GoogleMapReact的defaultCenter属性上。当前,您将一个位置数组作为位置属性传递给Map组件,然后使用与GoogleMapReact的defaultCenter相同的位置属性。这意味着Map以位置数组而不是单个位置为中心。
要解决此问题,可以将单个位置作为defaultCenter属性传递,也可以计算所有位置的中心并将其作为defaultCenter属性传递。以下示例说明如何计算所有位置的中心:
在本例中,我们使用Google Maps API中的LatLngBounds对象来计算所有位置的中心。我们创建一个新的LatLngBounds对象,并使用每个位置扩展它,然后获得边界的中心,并将其用作Map的defaultCenter。
请注意,在计算位置中心之前,您需要确保已加载Google Maps API。为此,您可以向GoogleMapReact添加一个onGoogleApiLoaded属性,并传递一个计算位置中心的回调函数。