3

在 MemSQL 中,我可以GEOGRAPHYPOINT轻松地从插入的值中自动计算 a:

CREATE TABLE point_test (
  id INTEGER NOT NULL,
  lon DECIMAL,
  lat DECIMAL,
  point AS GEOGRAPHY_POINT(lon, lat) PERSISTED GEOGRAPHYPOINT,
  PRIMARY KEY (id)
);

我如何对GEOGRAPHY多边形做同样的事情?我尝试了几种变体,例如

CREATE TABLE area_test (
  id INTEGER NOT NULL,
  lon1 DECIMAL,
  lon2 DECIMAL,
  lat1 DECIMAL,
  lat2 DECIMAL,
  area AS GEOGRAPHY_AREA("POLYGON((lon1 lat1, lon1 lat2, lon2 lat2, lon2 lat1, lon1 lat1))") PERSISTED GEOGRAPHY,
  PRIMARY KEY (id)
);

但无济于事。我可以看到多边形中的字段在插入过程中没有扩展,因此导致了一个NULL区域,但我似乎无法GEOGRAPHY_AREA以与 for 相同的方式创建有效的表达式GEOGRAPHY_POINT

编辑: 我能够通过 Joseph Victor 提供的提示解决这个问题。AGEOGRAPHY可以在插入时有效地计算如下:

CREATE TABLE area_test (
 id INTEGER NOT NULL,
 lon1 DECIMAL,
 lon2 DECIMAL,
 lat1 DECIMAL,
 lat2 DECIMAL,
 area AS CONCAT("POLYGON((", lon1," ",lat1,",",lon1," ",lat2,",",lon2," ",lat2,",",lon2," ",lat1,",",lon1," ",lat1,"))") PERSISTED GEOGRAPHY,
 PRIMARY KEY (id)
);
4

1 回答 1

3

所以,这种很烂,但lat1事情是一串串的。此外,GEOAGRAPHY_AREA 返回双精度值,而不是 GEOGRAPHY。尝试

area AS GEOGRAPHY_AREA(CONCAT("POLYGON((",
                              lon1,
                              " ",
                              lon2,
                              ",",
 ...
                              ")")) PERSISTED DOUBLE
于 2015-11-29T18:30:00.317 回答