gpt4 book ai didi

gis - 从 EPSG :4326 to UTM in PostGIS 转换

转载 作者:行者123 更新时间:2023-12-05 01:35:04 33 4
gpt4 key购买 nike

我要在 PostGIS 中从 EPSG:4326 转换为 UTM(30N/EPSG:32630 或 29N/EPSG:32629) .我执行以下查询,但得到错误的结果:

SELECT ST_AsText(ST_Transform(ST_GeomFromText('POINT(36.5277099609375 -5.86424016952515)',4326),32630)) As check;

我得到 "POINT(5262418.33128724 -839958.963432011)"什么时候应该接近 243625.00,4046330.00在 UTM 30N。如果我进行从 4326 到 UTM 的转换,我会得到正确的结果,但不会从 UTM 到 4326。
  • 查询有什么问题?
  • 无论如何从坐标中获取UTM时区
    EPSG:4326 因为我不知道它们是属于 30N 还是 29N?
  • 最佳答案

    1)您的查询是正确的,但您的坐标倒置了。 WKT 中正确的坐标顺序格式为 POINT(x y) , 还有 POINT(longitude latitude)
    此查询为您提供预期结果:

    SELECT ST_AsText(ST_Transform(ST_GeomFromText('POINT(-5.86424016952515 36.5277099609375)',4326),32630)) As check;

    2) 要从纬度/经度几何中获取 UTM 区域,您可以使用以下公式:
    ST_X(input_geometry)+180)/6)+1

    有一些调整。

    为此,我们使用此函数:
    CREATE OR REPLACE FUNCTION get_utmzone(input_geom geometry)
    RETURNS integer AS
    $BODY$
    DECLARE
    zone int;
    pref int;
    BEGIN
    IF GeometryType(input_geom) != 'POINT' THEN
    RAISE EXCEPTION 'Input geom must be a point. Currently is: %', GeometryType(input_geom);
    END IF;
    IF ST_Y(input_geom) >0 THEN
    pref:=32600;
    ELSE
    pref:=32700;
    END IF;
    zone = floor((ST_X(input_geom)+180)/6)+1;
    RETURN zone+pref;
    END;
    $BODY$
    LANGUAGE plpgsql IMMUTABLE;

    将此查询与它一起使用:
    SELECT get_utmzone(ST_GeomFromText('POINT( -5.86424016952515 36.5277099609375)',4326));

    结果应该是 32630

    关于gis - 从 EPSG :4326 to UTM in PostGIS 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32821176/

    33 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com