当前位置: 首页 > 知识库问答 >
问题:

使用ST_GeomFromGeoJSON插入几何体类型

纪实
2023-03-14

我有一个postgres表,它正在使用几何图形列类型。

这是我的桌子:

CREATE TABLE areas (
    id SERIAL PRIMARY KEY,
    name VARCHAR(64),
    polygon GEOMETRY
);

通常,我插入的数据如下:

INSERT INTO areas (name, polygon) VALUES (
    'A',
    ST_GeometryFromText('POLYGON ((-123.11386585235593 49.284015800344065, 
                        -123.11882257461549 49.28074038150665, 
                        -123.11337232589727 49.27721276406796, 
                        -123.1078577041626 49.281104327676616, 
                        -123.10996055603025 49.28152426222755, 
                        -123.11386585235593 49.284015800344065))'));

如果我运行postgres中的语句,当前工作正常。

但在我的NestJS/TypeORM实体中,我定义了:

@Column('geometry', {nullable: true, name: 'polygon ' }
@ApiProperty()
polygon : string;

一旦我将值赋值为:

地区。多边形='多边形(-123.11386585235593 49.28401580344065,-123.11882257461549.28074038150665,-123.113372325897249.27721276406796,-123.1078577041626 49.281104327676616,-123.1099605560302549.28152426222755,-123.113865835593 49.28401580344065));

我得到这个错误:

错误:错误:分析器处的GeoJSON类型未知。parseErrorMessage(C:\Users\myuserpath\myproject\node\u modules\pg protocol\dist\parser.js:278:15)

但是我注意到原始查询是:

INSERT INTO "areas VALUES ('A', ST_GeomFromGeoJSON('POLYGON ((-123.11386585235593 49.284015800344065, 
                            -123.11882257461549 49.28074038150665, 
                            -123.11337232589727 49.27721276406796, 
                            -123.1078577041626 49.281104327676616, 
                            -123.10996055603025 49.28152426222755, 
                            -123.11386585235593 49.284015800344065)))'::geometry)

我不确定列在哪里定义了ST_GeomFromGeoJSON如何使用tyform插入多边形?


共有2个答案

阚乐湛
2023-03-14

我发现实体的列只需在解析器上使用标准突变进行如下注释:

   @Column({
        type: 'geometry',
        spatialFeatureType: 'LineString',
        srid: 4326,
    })

与使用querybuilder相比,我更喜欢这种方法,当您进行查询时,您的数据已经格式化为几何体的text/JSON格式。

楚志强
2023-03-14

经过长时间的研究,我找到了一种方法。还有另一种执行插入的方法:

const myPolygon = [[-123.11882257461549 49.28074038150665],[...],[...],[...]]

    const areas = await getConnection()
          .createQueryBuilder()
          .insert()
          .into(Areas) //HERE YOUR TABLE NAME
          .values({
            name: 'MrMins',
            columnX: 'lorem ipsum', //LIST OF YOUR COLUMNS
            active: true, //LIST OF YOUR COLUMNS
            polygon: () =>
              `ST_GeomFromGeoJSON( '{ "type": "Polygon", "coordinates": [${myPolygon}] }' )`,
          })
          .execute();

实体声明为问题中的实体。但通过这种方式执行插入,您可以使用任何想要的功能:ST_GeometryFromText,或者即使您使用的是

 类似资料:
  • 前面课程绘制了一个立方体效果,下面通过three.js的球体构造函数SphereGeometry()在三维场景中添加一个球几何体。 SphereGeometry构造函数 SphereGeometry(radius, widthSegments, heightSegments) 第一个参数radius约束的是球的大小,参数widthSegments、heightSegments约束的是球面的精度,

  • 问题内容: 由于有几个版本,h2确实支持空间几何。 在Java中选择并插入几何图形不是问题。但是如何将它们插入纯sql中呢?文档显示它使用WKT。但是,当我尝试插入WKT时出现错误。 这是一个示例插入: 感谢您的提示! 问题答案: 据我所知,后缀不是WKT(知名文本),而是EWKT。 H2数据库当前不支持EWKT(扩展的知名文本)。您将不得不使用。一个完整的例子:

  • 使用GLE管材和挤出库(http://www.linas.org/gle/)我能够使用OpenGL将2D计数挤出到3D对象中。该库在CPU上完成所有工作,并使用OpenGL即时模式。 我想在GPU上使用几何着色器进行挤压可能会更快,尤其是在渲染大量几何图形时。因为我还没有在OpenGL中使用几何着色器的任何经验,我想知道这是否可能,以及我必须注意什么。您认为将这些计算转移到GPU并提高性能是个好主

  • 我有一个PHP7.3表单,要求用户输入名称、WKT和SRID。我想将WKT和SRID上传到SQL Server 2017,以便它在upload_WKT_测试中使用STGeomFromText创建一个几何对象: 我的名字。php: 我知道通过表单接受用户输入的首选方法是使用参数化查询来防止SQL注入。我相信错误消息的来源与WKT周围的引用有关,因为它们没有进入INSERT into语句。是否可以用引

  • 我正在开发一个将在MySql和MS SQL上运行的应用程序。 我有一个字段是空间的“几何”类型。 通过使用: (点是org.springframework.data.geo.point) Hibernate正确创建字段(hbm2ddl)。 但插入任何一点都不起作用。I get:数据截断:无法从发送到“几何体”字段的数据中获取几何体对象 我使用spring boot jpa启动器。。而不是直接冬眠。

  • 几何体组件为实体提供基本形状。这个 primitive属性定义常规形状。在计算机图形学中,几何基元是不可分的基本形状。通常还定义一个材质组件来创建完整的网孔(Mesh)。 目录 基础属性 每种几何图形类型都具有以下属性: 属性 描述 默认值 buffer 将几何体转换为BufferGeometry以减少内存使用,但代价是更难操作。 true primitive 几何体的名称(例如,下面列出的几何体