【问题标题】:Create CSV file from PHP query, then turn into GEOJSON file从 PHP 查询创建 CSV 文件,然后转换为 GEOJSON 文件
【发布时间】:2014-06-04 18:41:25
【问题描述】:

我有一个 PHP 方法,它返回一个 json 字符串,如下所示:

function getjson(){
$mun = $this->input->POST('municipality');
$sl  = $this->input->POST('saleslimit'); 
$q = $this->db->query("SELECT RollNum , Address, v2_lat, v2_lng  
    FROM tblontario WHERE Municipality = '".$mun."'"." LIMIT ".$sl);            
        $json_string = json_encode($q->result(), JSON_PRETTY_PRINT);
        file_put_contents('/home/apts/Dropbox/ptax.ca/js/salecomps.json', $json_string);
        echo $json_string;
}

我希望能够返回一个 CSV 文件,而不是返回一个 json 字符串,这样我就可以获取该 CSV 文件并以某种方式将其转换为可以加载到 google map 中的 geojson 文件。

关于如何做到这一点的任何想法?最终我的目标是创建一个geojson 文件,但我不确定最好的方法。谢谢。

【问题讨论】:

    标签: php csv geojson


    【解决方案1】:

    如果 $row 是一个数组,你可以这样做:

    function getCSV() {
        $mun = $this->input->POST('municipality');
        $sl  = $this->input->POST('saleslimit'); 
        $q = $this->db->query("
            SELECT 
                RollNum, 
                Address,
                v2_lat,
                v2_lng 
            FROM
                tblontario 
            WHERE 
                Municipality = '".$mun."'"." 
            LIMIT ".$sl
        );
        $row = $q->result();
        $csvRow = implode(",",$row);
        file_put_contents('/home/apts/Dropbox/ptax.ca/js/salecomps.csv', $csvRow);
        echo $csvRow;
    }
    

    由于我在那里看到了一个限制,我猜你得到的结果不止一个,而且 $q->result();返回一个结果数组而不是一行,在这种情况下..

    function getCSV() {
        $mun = $this->input->POST('municipality');
        $sl  = $this->input->POST('saleslimit'); 
        $q = $this->db->query("
            SELECT 
                RollNum, 
                Address,
                v2_lat,
                v2_lng 
            FROM
                tblontario 
            WHERE 
                Municipality = '".$mun."'"." 
            LIMIT ".$sl
        );
        $res = $q->result();
        if(!empty($res)){
            $fh = fopen('/home/apts/Dropbox/ptax.ca/js/salecomps.csv','w');
            foreach($res as $row){
                // as suggested by @GigaWatt, swapped fwrite for fputcsv
                fputcsv($fh,$row);
            }
            fclose($fh);
            echo file_get_contents('/home/apts/Dropbox/ptax.ca/js/salecomps.csv');
        } else {
            echo "";
        }
    
    }
    

    编辑:查看 GeoJSON 规范,您可能想要的是:

    function getGeoJSON() {
        $mun = $this->input->POST('municipality');
        $sl  = $this->input->POST('saleslimit'); 
        $q = $this->db->query("
            SELECT 
                RollNum, 
                Address,
                v2_lat,
                v2_lng 
            FROM
                tblontario 
            WHERE 
                Municipality = '".$mun."'"." 
            LIMIT ".$sl
        );
        $res = $q->result();
        if(!empty($res)){
            $geoArr = Array(
                "type" => "MultiPoint",
                "coordinates" => Array()
            );
            foreach($res as $row) {
                $geoArr["coordinates"][] = Array($row['v2_lat'],$row['v2_lng']);
            }
            $geoJSON = json_encode($geoArr);
            file_put_contents('/home/apts/Dropbox/ptax.ca/js/salecomps.geojson',$geoJSON);
            echo $geoJSON;
        } else {
            echo "{}";
        }
    
    }
    

    【讨论】:

    • fputcsv 可能比重新发明 CSV 更好。
    • 感谢 Meridion,我认为您使用 GeoJSON 的最后一段代码正是我所寻找的。不幸的是,我收到一个错误,内部服务器错误。不知道如何调试这个。我正在努力 。 . .
    • 你是否设置了错误报告给所有? (error_reporting(E_ALL);)
    • 这是导致错误的行:$geoArr["coordinates"][] = Array($row['v2_lat'],$row['v2_lng']);
    • 你这么说很奇怪,看看here,它工作得很好..
    【解决方案2】:

    据我了解,您基本上是在寻找 getCSV() 函数。您可以通过手动连接结果集的元素来做到这一点。像这样。

    function getCSV(){
        $mun = $this->input->POST('municipality');
        $sl  = $this->input->POST('saleslimit'); 
        $q = $this->db->query("SELECT RollNum , Address, v2_lat, v2_lng FROM tblontario WHERE Municipality = '".$mun."'"." LIMIT ".$sl);
        $row = $q->result();
        $csvString =  $row->{'RollNum'}.','.$row->{'Address'}.','.$row->{'v2 lat'}.','.$row->{'v2 lng'};
        file_put_contents('/home/apts/Dropbox/ptax.ca/js/salecomps.csv', $csvString);
        echo $csvString;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-28
      • 1970-01-01
      • 1970-01-01
      • 2015-12-23
      • 1970-01-01
      • 1970-01-01
      • 2011-10-17
      • 2019-08-05
      相关资源
      最近更新 更多