【发布时间】:2019-11-04 10:54:40
【问题描述】:
我在 Laravel Blade 视图中有一个 Lealfet 地图,用户可以在其中绘制形状和标记。这些功能在GeoJson 对象中注册,我将其字符串化并插入到名为“geojson”的隐藏textarea 中,以在表单中将其提交给服务器。
问题是我想使用 PostGis ST_GeomFromGeoJSON() 函数将此数据保存为 geometry 类型在我的 PostgreSQL 数据库中,但我无法让它工作。
这是我现在尝试的:
$site = new Site;
$data = $request->all();
unset($data['geojson']);
foreach($data as $key=>$d)
{
$site->$key = $d;
}
$geojson = json_decode($request->geojson);
$site->save();
DB::update('update posha_sites set geom = ST_GeomFromGeoJSON(?)
WHERE num_site = ?
AND city_id = ?',
[$geojson, $request->num_site, $city_id->id]
);
现在我正在保存所有数据,然后尝试插入 geospatial 数据,因为我不知道如何在保存其余数据的同时使用原始查询。
当我这样做时,我得到了这个错误:
stdClass 类的对象无法转换为字符串
编辑
这是 posha_sites 表的整个迁移:
public function up()
{
Schema::create('posha_sites', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->bigInteger('num_site');
$table->string('type', 50)->nullable();
$table->mediumText('adresse')->nullable();
$table->string('cartes_anciennes')->nullable();
$table->string('carte_topo')->nullable();
$table->mediumText('cadastre_remembre')->nullable();
$table->mediumText('cadastre_moderne')->nullable();
$table->mediumText('cadastre_ancien')->nullable();
$table->string('lieu_dit')->nullable();
$table->mediumText('nature_parcelles')->nullable();
$table->mediumText('conditions_acces')->nullable();
$table->string('situation_administrative')->nullable();
$table->string('altitude')->nullable();
$table->string('relief')->nullable();
$table->mediumText('hydrographie')->nullable();
$table->string('geologie')->nullable();
$table->string('vestiges_periode')->nullable();
$table->mediumText('vestiges_nature')->nullable();
$table->mediumText('vestiges_conservation')->nullable();
$table->longText('plans_documents_figures')->nullable();
$table->longText('sources_manuscrites')->nullable();
$table->longText('sources_imprimees')->nullable();
$table->longText('renseignement_oral')->nullable();
$table->longText('bibliographie')->nullable();
$table->longText('histoire')->nullable();
$table->longText('historiographie')->nullable();
$table->longText('description_histoire_monumentale')->nullable();
$table->geometrycollection('geom')->nullable();
$table->string('last_author')->nullable();
$table->integer('tree_id')->unsigned()->nullable();
$table->integer('parent_id')->unsigned()->nullable();
$table->integer('city_id')->unsigned();
$table->timestamps();
});
}
ST_GeomFromGeoJSON() 函数实际上需要一个字符串,所以我没有解码我的 $geojson 变量:
$geojson = $request->geojson;
代替:
$geojson = json_decode($request->geojson);
但我仍然收到错误:
SQLSTATE[XX000]:内部错误:
7 错误:无效的 GeoJson 表示(SQL:更新 posha_sites set geom = ST_GeomFromGeoJSON({"type":"FeatureCollection","features":[{"type":"Feature","properties":{},"几何":{"type":"Point","coordinates":[-0.229114,44.564488]}}]}) WHERE num_site = 248 AND city_id = 5)
但我在在线 geojson 验证器中测试了我的 geojson,结果似乎是正确的。
【问题讨论】:
-
posha_sites 表的迁移是什么样的?
-
我编辑了我的帖子
-
您的迁移出错。数据类型为驼峰式。您需要“geometryCollection”而不是“geometrycollection”。 (这可能是错误的,不过最好先检查一下)。
标签: php laravel laravel-5 leaflet postgis