我正在尝试使用 react-native-maps 库在 Android 和 iOS 中呈现自定义标记,其中标记的数量可以在 16-900 之间。
当标记数量增加(>60)或标记大小增加时,某些标记在iOS中没有完全渲染。但是,如果用户单击该区域,标记将被渲染并且现在可见。
尽管这在 Android 中运行良好,所以我的假设是 iOS 存在一些渲染问题。
标记格式:
markers = {
["key": 0, "latitude": 34.123, "longitude": 134.123],
["key": 1, "latitude": 35.123, "longitude": 135.123],
["key": 2, "latitude": 36.123, "longitude": 136.123],
[],
[]
}
示例代码:
注意:标记通过 API 获取并保存在状态中
import React from 'react';
import MapView, {PROVIDER_GOOGLE} from 'react-native-maps';
class CustomMap extends React.Component {
constructor(props) {
super(props);
this.state = {
markers: [],
region: {
latitude: 34.334653,
longitude: 134.365288,
latitudeDelta: 0.45,
longitudeDelta: 0.45,
},
};
}
render() {
const {
region,
markers,
} = this.state;
return (
<View style={{flex:1}}>
<MapView
provider={PROVIDER_GOOGLE}
style={styles.map}
initialRegion={region}
region={region}
ref={ref => (this.map = ref)}>
{markers &&
markers.map((marker, index) => (
<CustomMarker
marker={marker}
key={index}
/>
))}
</MapView>
</View>
);
}
}
}
下面是CustomMarker类
import React, {useState} from 'react';
import {Marker} from 'react-native-maps';
const CustomMarker = ({marker}) => {
const [tracksViewChanges, setTracksViewChanges] = useState(true);
return (
<Marker
key={marker.key}
coordinate={marker}
>
<Image fadeDuration={0} source={getIcon(marker)} />;
</Marker>
);
};
const getIcon = marker => {
switch (marker?.id) {
case a:
return require('Assets/Images/img1/a.png');
case b:
return require('Assets/Images/img2/b.png');
case c:
return require('Assets/Images/img3/c.png');
default:
}
};
我尝试了以下事情:-
使用
.map()
函数将所有标记直接渲染到地图上可能不是显示标记的最佳方式。我很确定您的标记没有正确渲染以防止渲染/性能问题。
如果位置彼此靠近,则更好的解决方案可能是将多个标记“合并”在一起,具体取决于缩放级别。您可能已经看到其他应用程序在您缩小时将多个标记合并为一个,以防止数百个标记使您的视图混乱。
我搜索了一下,
react-native-maps
回购中已经发布了一个关于这个的问题。请参阅:Marker Clustering #2992
在评论中,链接了一个库以提供这种“合并”功能。它已经有一段时间没有真正更新了,但是在撰写本文时每周有 9.000 次下载,看来这个库仍然可以正常工作。我建议您尝试一下,看看您的问题是否仍然存在。
看了一下源码,看起来不是很复杂。因此,通过一些调整,您可以对其进行修补以满足您的确切需求。
我确实相信,如果我们都能一起设置并澄清按钮,以设置按钮以安装在未来搬家和土地的实践中,并让街道像杰森一家一样隐形。事实也是找到信号或人对建筑物及其过去的分配,以明确时区。我没有按钮让钱花得值,建议人们在为时已晚之前玩自己的游戏。我想帮助提供赌场和酒店按摩床和房间的想法。我需要人名时间和重述标题的检查点。 Google adsense 仍然没有让钱显示出来,因为我没有在显示找到我的时间中被隐藏。我需要有关酒店和工作娱乐名片的帮助。请帮忙。 lvdutwcp@yahoo.com 和 leilanidvl2023@gmail.com
5 星痴呆让我迷路,我的互联网在接下来的页面中丢失。请给我一个方法,看看谁能帮我找个地方骑车
我需要教人们我经历过的 senerio 问题,并发出标题以修复互联网,避免我经历过的所有错误,并保护每个痴呆症的文件