【发布时间】:2020-06-02 12:58:50
【问题描述】:
使用 react 我正在尝试创建一个带有标记的谷歌地图,它适用于地址而不是 lat/lng 值。如您所见,组件在安装时创建一个脚本标签,并通过 google.maps... 函数初始化地图和标记。如果我用 lat/lng 创建一个标记,它工作正常,但我想按地址搜索。这是我的代码,你能找到错误吗? 我没有使用任何软件包,也想坚持这一点。 (没有包裹!) 另一个问题是我必须以什么格式写这些地址。街道、邮政编码、城市?
堆栈溢出需要更多文本,很抱歉重复我自己。
export interface ProjectsListMapProps {
}
export default class ProjectsListMap extends React.Component<ProjectsListMapProps> {
constructor(props: ProjectsListMapProps) {
super(props);
this.renderMap = this.renderMap.bind(this);
this.mapContainer = this.mapContainer.bind(this);
this.codeAddress = this.codeAddress.bind(this);
}
componentDidMount() {
if (!document.querySelectorAll(`[src="${'https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY'}"]`).length) {
document.body.appendChild(Object.assign(
document.createElement('script'), {
type: 'text/javascript',
src: 'https://maps.googleapis.com/maps/api/js',
onload: () => this.renderMap()
}
));
}
}
renderMap() {
const coords = { lat: 41.375885, lng: 2.177813 };
const el = document.getElementById('map');
if (el) {
const map = new google.maps.Map(el, {
zoom: 16,
center: {
lat: coords.lat,
lng: coords.lng
}
});
const geocoder = new google.maps.Geocoder();
this.codeAddress(geocoder, map);
return map;
}
else {
return null;
}
}
codeAddress(geocoder: any, map: any) {
geocoder.geocode({'address': 'Budapest'}, function(results: any, status: any) {
console.log(results);
if (status === 'OK') {
map.setCenter(results[0].geometry.location);
const marker = new google.maps.Marker({
map: map,
position: results[0].geometry.location
});
return marker;
}
else {
return null;
}
});
}
render() {
return(
<div className="card map-holder">
<div id="map" />
</div>
);
}
}
My Log 结果返回一个空数组。
【问题讨论】:
-
你能提供一个有效的minimal reproducible example 作为代码 sn-p / fiddle 吗?
-
我已从您的问题中删除了您的 API 密钥。请不要在公共网站上共享私有 API 密钥,并确保按照 developers.google.com/maps/… 限制它们
-
@evan 如果它受到适当限制,那么您可以在任何您喜欢的地方分享它......无论如何它在任何使用 API 的网站上都是公开的。
-
@MrUpsidown codepen.io/mblmarlon/pen/PoqzjXy 抱歉让我有点失望
-
不,您需要在 developers console 中启用地理编码 API。您应该阅读错误消息附带的链接,它实际上很有用。
标签: reactjs typescript google-maps geolocation geocoding