将几何特征更改为现有数据库

Posted

技术标签:

【中文标题】将几何特征更改为现有数据库【英文标题】:change geometry feature to existing database 【发布时间】:2018-03-05 00:34:59 【问题描述】:

我正在使用脚本将几何特征导入数据库。我将花费下面的脚本。如果导入所有 geo_features,该脚本效果很好。但是我的问题是,如果我想更改某些功能,则此脚本会删除整个表并仅输入更改。因为我正在导入的文件只有要添加的新功能,或者需要进行的更改。

该表包含 1000 行。所以清空它等不是一种选择。

有人可以指导我如何调整这个脚本,以便我想添加到数据库中的现有表中,或者更改数据库中表中已经存在的行吗?

脚本:

<?php   
define('DBHOST', 'localhost');
define('DBUSER', 'root');
define('DBPASS', '');
define('DBNAME', 'sample');

$conn = mysqli_connect(DBHOST,DBUSER,DBPASS,DBNAME);
$file=file_get_contents("wf.geojson");
$contents=json_decode($file);
echo "processing...";
mysqli_query($conn,"DELETE FROM geo_features") or die("delete error");
for($i=0;$i<count($contents->features);$i++)
    $type=$contents->features[$i]->properties->type;
    $name=$contents->features[$i]->properties->name;
    $aisle=$contents->features[$i]->properties->aisle;
    $floormap_id=$contents->features[$i]->properties->id;
    $g=$contents->features[$i]->geometry->coordinates[0];
    $gt=$g[0][0]." ".$g[0][1];
    for($j=1;$j<count($g);$j++)
        $gt.=",".$g[$j][0]." ".$g[$j][1];
    
    $geometry="POLYGON((".$gt."))";
    $sql="insert into geo_features
                    (id,geometry,type,name,floormap_id)             
            values('$floormap_id',GeomFromText('$geometry'),
                    '$type','$name','1')";
    echo $sql;
    mysqli_query($conn,$sql) or die("error");

echo "success!";
?>

【问题讨论】:

【参考方案1】:

在声明中

mysqli_query($conn,"DELETE FROM geo_features")

您还应该添加如下部分:

where id in (...list of ids...)

并列出 (...) 中的所有 id。如果您只运行 DELETE FROM TABLE,那么您将删除所有内容。如果您运行 DELETE FROM TABLE WHERE (criteria) 而不是从表中删除仅满足特定条件的内容,例如 id 值在列表中。 如果您无法提供 id,则必须制定规则来确定这些行。

此外,您可以使用 UPDATE 子句代替 DELETE/INSERT。

【讨论】:

以上是关于将几何特征更改为现有数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何将现有列表更改为新列表? || android - firebase 实时数据库

将现有 SQL Server 2005 数据库中的数据类型 varchar 更改为 nvarchar。有啥问题吗?

将数据类型从int更改为time会导致现有值出错

将输入测试数据更改为特征矩阵的维度

如何将现有数据库的“innodb_file_per_table”参数从“OFF”更改为“1”?

如何将我的索引向量更改为可在 sklearn 中使用的稀疏特征向量?