【问题标题】:How do I enter an "empty" POINT() geometry value into a MySQL field of type POINT?如何在 POINT 类型的 MySQL 字段中输入“空”POINT() 几何值?
【发布时间】:2015-08-29 01:08:39
【问题描述】:

我有一个带有POINT 几何字段的表。我这样输入纬度/经度点:

INSERT INTO table( point )
VALUES( POINT( lon_value, lat_value );

有时我没有要输入的纬度/经度值。我无法输入空白、NULL 或空 POINT() ... 因为 POINT(0,0) 实际上是地球上的一个位置,这也不起作用。

这里有什么解决办法?

【问题讨论】:

    标签: mysql geolocation geocoding geospatial point


    【解决方案1】:

    由于南半球和北半球的有效纬度范围分别为 -90 和 +90;我可以通过传入和使用 99(任意超出范围的数字)来在 NULL 之间切换值,如下所示:

    ("UPDATE
         tableName SET LatLng = IF(%Lat = 99, NULL, POINT(%Lat, %Lng))
         Where itemID = %itemID"
    , array(
         'itemID' => $itemID, 
         'Lat' => $Lat == NULL ? 99 : $Lat,
         'Lng' => $Lng == NULL ? NULL : $Lng 
    ));
    

    【讨论】:

      【解决方案2】:

      只有 GeometryCollection 支持 EMPTY:https://dev.mysql.com/doc/refman/8.0/en/gis-data-formats.html

      INSERT INTO table( point )
      VALUES( ST_GeomFromText('GEOMETRYCOLLECTION EMPTY') );
      

      【讨论】:

        【解决方案3】:

        我会使用北极的坐标

        INSERT INTO table( point )
        VALUES( POINT(0.0000,90.0000);
        

        如果极点的实际坐标可能是个问题,我会将 lon 值从 0.0000 更改。

        【讨论】:

        • 真的吗??有没有更好的办法?根据我对手册的理解,POINT 使用25 bytes。这是对内存的误用
        • 这方面有更新吗?仍在寻找答案。
        • 25 字节太多了。他们应该引入smallpointtinypoint 类型,以防人们不需要双精度坐标。并且不允许 NULL 在 25 字节中是非常荒谬的。并感谢北极的想法。那将足够冷,可以用作空值。 :)
        猜你喜欢
        • 2019-09-03
        • 2018-03-18
        • 2014-04-03
        • 1970-01-01
        • 1970-01-01
        • 2021-11-05
        • 2021-06-26
        • 2012-06-20
        • 2020-10-25
        相关资源
        最近更新 更多