如何使用突变在graphql中使用postgis的点类型坐标信息?

Posted

技术标签:

【中文标题】如何使用突变在graphql中使用postgis的点类型坐标信息?【英文标题】:How can I use the point type coordinate information of postgis in graphql using mutations? 【发布时间】:2021-09-01 20:29:23 【问题描述】:

我创建了一个突变来将新数据插入到名为 location 的 postgresql 中。列坐标必须接收和存储数据,例如ST_GeomFromGeoJSON(' "type": "Point", "coordinates": [-48.23456,20.12345]')。

但是,graphql 不起作用,所以我不知道在哪里修改它。我认为这是因为我制作的名为 GeoJSONPoint 的标量无法正常工作。如果graphql将数据放在上面,你能告诉我如何创建一个标量吗?

GeoJSONPoint 标量

import  GraphQLScalarType, Kind  from 'graphql';

export const GeoJSONPoint = new GraphQLScalarType(
    name: 'GeoJSONPoint',
    description: 'Geometry scalar type',
    parseValue(value) 
        return value;
    ,

    serialize(value) 
        return value;
    ,

    parseLiteral(ast) 
        if (ast.kind === Kind.OBJECT) 
            console.log(ast);
            return new Object(ast);
        
        return null;
    
);

位置.实体

import 
    Column,
    CreateDateColumn,
    Entity,
    JoinColumn,
    ManyToOne,
    PrimaryGeneratedColumn
 from 'typeorm';
import  Location_Group  from './location_group.entity';
import  Geometry  from 'geojson';
import  Field, ID, Int, ObjectType  from '@nestjs/graphql';
import  GeoJSONPoint  from 'src/scalar/geoJSONPoint.scalar';

@ObjectType()
@Entity('location')
export class Location 
    @Field(() => ID)
    @PrimaryGeneratedColumn('increment')
    id: number;

    @Field(() => String)
    @Column( type: 'varchar' )
    name: string;

    @Field(() => GeoJSONPoint)
    @Column(
        type: 'geometry',
        nullable: true,
        spatialFeatureType: 'Point',
        srid: 4326
    )
    coordinate: Geometry;

    @Field(() => Int)
    @Column( type: 'int' )
    order_number: number;

    @Field()
    @CreateDateColumn( type: 'timestamptz' )
    created_at: Date;

    @Field(() => Location_Group)
    @ManyToOne(
        () => Location_Group,
        (location_group) => location_group.location
    )
    @JoinColumn([ name: 'location_group_id', referencedColumnName: 'id' ])
    location_group: Location_Group;

解析器

    @Mutation(() => Location)
    async createLocation(
        @Args('data') data: LocationDataInput
    ): Promise<Location> 
        console.log(data);
        return await this.locationService.setLocation(data);
    

【问题讨论】:

我解决了这个问题。首先,我们将 parseLiteral 以标量方式输入的值划分为 type: '', coordinates: [] 并去掉外键列。感谢您的关注。 请在这里回答 【参考方案1】:

我解决了这个问题。首先,我们将parseLiteral输入的值以标量划分为

type: '', coordinates: [] 

并删除了外键列。

【讨论】:

以上是关于如何使用突变在graphql中使用postgis的点类型坐标信息?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 GraphQL 突变中使用 FaunaDB 将数组传递给字段

如何使用动态别名在单个请求中多次调用 GraphQL 突变

如何在 graphQL 突变中使用柴油和杜松修复 mysql 的 sql 类型错误?

如何在 Graphql 突变中返回 PDF 文件?

如何使用 GraphQL 突变进行更新(热巧克力)

如何在突变 graphQL Playground 中传递变量?