如何使用fgetcsv检测CSV最后一行,以修正GeoJSON输出格式?
嘿,我明白你遇到的问题了——手动拼接GeoJSON的时候,最后一个Feature后面多出来的逗号确实会导致格式错误,用fgetcsv逐行读取的时候确实没法直接预判是不是最后一行对吧?
给你个简单靠谱的解决思路:先把CSV里的所有行一次性读取到一个数组里,这样你就能明确知道总行数,遍历的时候就可以轻松判断当前是不是最后一行,从而决定要不要加逗号。
下面是修改后的代码示例(你可以根据自己CSV的列结构调整字段映射):
// 第一步:把整个CSV文件读取到数组中 $csvRows = []; $csvHandle = fopen("your_input.csv", "r"); if ($csvHandle !== false) { while (($rowData = fgetcsv($csvHandle, 0, ",")) !== false) { $csvRows[] = $rowData; } fclose($csvHandle); } // 第二步:生成符合规范的GeoJSON $totalFeatures = count($csvRows); echo '{ "type": "FeatureCollection", "features": [' . PHP_EOL; foreach ($csvRows as $index => $row) { // 这里根据你的CSV列定义来构造Feature,示例假设第0列是经度,第1列是纬度,第2列是名称 $featureJson = '{ "type": "Feature", "geometry": { "type": "Point", "coordinates": [' . $row[0] . ', ' . $row[1] . '] }, "properties": ' . json_encode(["name" => $row[2]]) . ' }'; echo $featureJson; // 只有不是最后一个Feature的时候才添加逗号 if ($index !== $totalFeatures - 1) { echo ","; } echo PHP_EOL; } echo '] }';
几个实用小提示:
- 用
json_encode()处理properties部分比手动拼接字符串更安全,能自动处理引号、特殊字符等问题,避免GeoJSON出现语法错误 - 如果你的CSV包含表头行,记得先跳过第一行(比如读取数组后用
array_shift($csvRows)移除表头)
这样处理后,最后一个Feature后面就不会有多余的逗号了,生成的GeoJSON就能正常在Google地图上加载啦!
内容的提问来源于stack exchange,提问作者Digital Essence
相关产品推荐
相关产品推荐

