react-native-maps在Android中使用字符串坐标数组失效问题求助
React Native Maps Android标记不显示:字符串坐标转数值解决方案
问题核心:react-native-maps在Android平台要求coordinate的latitude和longitude必须是数值类型,iOS会自动隐式转换字符串为数值,所以iOS能正常显示标记,而Android无法识别字符串类型的坐标。
你之前尝试的replace('"', '')操作完全无效,因为从MySQL经PHP返回的JSON解析后,data.latitude的值是不带外层引号的字符串(引号是JSON语法的一部分,解析后已被移除),问题本质是类型不匹配,而非字符串包含引号。
可行解决方法
方法1:渲染Marker时直接转换类型
在设置coordinate时,用parseFloat()将字符串坐标转为浮点数:
{locationData.map((data, index) => ( <Marker key={index} coordinate={{ latitude: parseFloat(data.latitude), longitude: parseFloat(data.longitude) }} /> ))}
方法2:预处理数据(推荐)
提前将整个数组的字符串坐标转为数值,避免每次渲染重复执行转换操作:
// 预处理坐标数组 const processedLocationData = locationData.map(item => ({ latitude: parseFloat(item.latitude), longitude: parseFloat(item.longitude) })); // 使用处理后的数组渲染标记 {processedLocationData.map((data, index) => ( <Marker key={index} coordinate={{ latitude: data.latitude, longitude: data.longitude }} /> ))}
额外优化:从PHP端解决
如果可以修改PHP代码,建议在生成JSON时直接将坐标转为数值类型,前端无需额外处理:
// PHP示例:将数据库取出的字符串坐标转为浮点数 $locationData = []; while ($row = $result->fetch_assoc()) { $locationData[] = [ 'latitude' => (float)$row['latitude'], 'longitude' => (float)$row['longitude'] ]; } echo json_encode($locationData);
内容的提问来源于stack exchange,提问作者JulesUK
相关产品推荐
相关产品推荐

