【发布时间】:2019-07-22 09:46:32
【问题描述】:
我正在尝试在 Laravel 项目中使用一些 postgis 函数来存储一些地理信息。
使用 Leaflet 及其 Leaflet-draw 插件,用户可以在地图上找到考古遗址的位置。但问题是,如果它是一个小而精确定位的站点,他可以将其定位为一个点,或者如果它更大或不精确,则可以在他在地图上绘制的多边形内定位。在地图上绘制的图层给了我一个 geojson,我想用 Postgis 将它转换为几何对象。
因此,对于我的“posha_sites”表,我需要一个可以存储任何内容的几何类型,在我看来,GeometryCollection 类型就是为此而设计的,所以这是我添加几何列时迁移的向上功能到我的桌子上。
public function up()
{
Schema::table('posha_sites', function (Blueprint $table) {
$table->geometrycollection('geometry');
});
}
一开始我尝试使用在 GitHub 上找到的 njbarrett/laravel-postgis 包,但在尝试插入 add GeometryCollection 时遇到了 SRID 问题。
$site->geometry = new GeometryCollection([new Point(-48.23456, 20.12345)]);
这给了我这个错误:
Invalid parameter value: 7 ERREUR: Geometry SRID (0) does not match column SRID (4326)
我不知道这个包是否提供了一种指定 SRID 的方法,所以我只是尝试了一个使用 postgis 函数的原始 sql 查询:
update posha_sites set geometry = ST_SetSRID(ST_ASTEXT(ST_GeomFromGeoJSON(\'{"type":"Point","coordinates":[-48.23456,20.12345]}\')), 4326)
这样设置了 SRID 但我仍然收到错误:
Invalid parameter value: 7 ERREUR: Geometry type (Point) does not match column type (GeometryCollection)
我应该插入什么以使其与 GeometryCollection 类型匹配,还是应该使用其他类型?
【问题讨论】:
标签: laravel leaflet gis postgis geojson