我正在尝试基于另一个具有lon的表创建geom表。我试图在表中创建两列,一列使用Spherical Mercator(SRID 4326,地理坐标系),另一列使用投影坐标系(SRID 3857)。以下是我的查询。
create table KP_SPTL(
select mdsys.sdo_geometry(
2003,
4326,
NULL,
SDO_ELEM_INFO_ARRAY(1,3,3),
SDO_ORDINATE_ARRAY(B.LL_LAT, B.LL_LON, B.UR_LAT, B.UR_LON)
) as KP_GCS,
select mdsys.sdo_geometry(
2003,
3857,
NULL,
SDO_ELEM_INFO_ARRAY(1,3,3),
SDO_ORDINATE_ARRAY(B.LL_LAT, B.LL_LON, B.UR_LAT, B.UR_LON)
) as KP_PCS,
B.COMPANY, B.ADDRS,B_CDE
FROM KP_STAGE B);
我收到以下错误
Error report:
SQL Error: ORA-00936: missing expression
00936. 00000 - "missing expression"
但是,如果我删除第二个select语句,它工作正常,我的意思是如果sql查询如下所示
create table KP_SPTL(
select mdsys.sdo_geometry(
2003,
4326,
NULL,
SDO_ELEM_INFO_ARRAY(1,3,3),
SDO_ORDINATE_ARRAY(B.LL_LAT, B.LL_LON, B.UR_LAT, B.UR_LON)
) as KP_GCS,
B.COMPANY, B.ADDRS,B_CDE
FROM KP_STAGE B);
如何使用第二个选择语句,如果它正常查询,我们可以使用从语句中选择。但是在这种情况下如何使用?
我不知道什么是甲骨文空间在所有。但是只要看SQL,我想,下面的工作。!
mdsys.sdo_geometry()
返回 TYPE sdo_geometry
,它可以在 SELECT 子句中多次使用。我们不需要每次都陪伴SELECT。
它就像SELECT B.COMPANY,B.ADDRS,B_CDE
.。您不需要始终在 SELECT 前面加上
前缀!
SQL 的一般语法可以是 SELECT
create table KP_SPTL(
select mdsys.sdo_geometry(
2003,
4326,
NULL,
SDO_ELEM_INFO_ARRAY(1,3,3),
SDO_ORDINATE_ARRAY(B.LL_LAT, B.LL_LON, B.UR_LAT, B.UR_LON)
) as KP_GCS,
mdsys.sdo_geometry(
2003,
3857,
NULL,
SDO_ELEM_INFO_ARRAY(1,3,3),
SDO_ORDINATE_ARRAY(B.LL_LAT, B.LL_LON, B.UR_LAT, B.UR_LON)
) as KP_PCS,
B.COMPANY, B.ADDRS,B_CDE
FROM KP_STAGE B);
由于多种原因,您的陈述不会达到您的预期。
据我所知,您的源表KP_STAGEB包含四列:LL_LAT、LL_LON、UR_LAT、UR_LON,大概是某个矩形的两个角(左下和右上)的纬度和经度。据你所说,这些坐标在long/lat WGS84(即SRID 4326)中
并且您需要一个包含两个几何对象的新表,一个包含长/纬度矩形(SRID 4326),以及SRID 3857(Google和其他人使用的球形墨卡托投影)中的等效项。
你的语法有三个问题:
1)纵坐标的顺序始终是X,然后是Y,对于地理坐标(纬度/经度),这意味着它们必须首先在经度中指定,然后以纬度指定。这是所有 GIS 系统存储地理数据的方式。所以使用这个:
sdo_geometry(
2003, 4326, NULL,
SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(
LL_LON, LL_LAT,
UR_LON, UR_LAT
)
) as KP_GCS,
2) 多边形的元素类型必须是 1003 或 2003 之一,而不仅仅是 3。这样,数据库就可以区分“外环”(=正多边形)和“内环”(=孔)。
3) 最重要的是:仅通过在空间对象中设置不同的SRID,无法在不同的坐标系(在本例中为3857)中构造几何体。您需要使用SDO_CS将其转换(投影)到适当的坐标系。TRANSFORM()调用,如下所示:
sdo_cs.transform (
sdo_geometry(
2003, 4326, NULL,
SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(
LL_LON, LL_LAT,
UR_LON, UR_LAT
)
),
3857
) as KP_PCS
请注意,这不会返回简单双角表示法中的矩形:虽然结果将以图形方式呈现为矩形,但其内部表示法是完整多边形的表示法。
因此,完整而正确的答案将是:
create table KP_SPTL as
select sdo_geometry (
2003, 4326, NULL,
SDO_ELEM_INFO_ARRAY (1,1003,3),
SDO_ORDINATE_ARRAY (
LL_LON, LL_LAT,
UR_LON, UR_LAT
)
) as KP_GCS,
sdo_cs.transform (
sdo_geometry(
2003, 4326, NULL,
SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(
LL_LON, LL_LAT,
UR_LON, UR_LAT
)
),
3857
) as KP_PCS,
COMPANY, ADDRS, B_CDE
from KB_STAGE_B;
或者更简单:
create table KP_SPTL as
with t as (
select COMPANY, ADDRS, B_CDE,
sdo_geometry (
2003, 4326, NULL,
SDO_ELEM_INFO_ARRAY (1,1003,3),
SDO_ORDINATE_ARRAY (
LL_LON, LL_LAT,
UR_LON, UR_LAT
)
) as KP_GCS,
from KB_STAGE_B
)
select KP_GCS, sdo_cs.transform(KP_GCS, 3857) KP_PCS, COMPANY, ADDRS, B_CDE
from t;
问题内容: 我正在使用MySQL,并且想在SQL中执行一种三元语句,例如: 结果将类似于: 如何做到这一点? 问题答案:
问题内容: 在python中,我们使用反斜杠表示当前语句继续到下一行 例如, 或者简单地说, 可以用Go语言做到这一点吗?谢谢 问题答案: 当然可以,只需将运算符放在最后,例如: 另请注意,不可能在操作员之前中断换行。以下代码 无效 : 该规则在此处和规范中进行了描述。
问题内容: 我在Robot Framework中编写条件时遇到麻烦。 我要执行 我可以在一个条件下使用此关键字,但是在多个条件下,出现此错误: 失败:关键字名称不能为空。 我也想使用这些关键字: 和 但是我最终会遇到错误。 问题答案: 您应该使用小写字母“ or”和“ and”,而不是OR和AND。 并且要注意关键字和参数之间的空格/制表符(您至少需要两个空格)。 这是一个代码示例,您的三个关键字
数据库:Sybase Advantage 11 在我对数据进行规范化的过程中,我试图删除从以下语句中得到的结果:
我有两个问题。 ①当useState初始值真假时,if语句如何适应下面? 比如说。。 ②当if语句为true和false时,如何使setGoodBotton从React钩子和if语句适应下面? 例如…(这不是工作)
问题内容: 我在Elasticsearch索引中的文档中存储了值。 我需要对值进行一些日期操作,并返回要在过滤器中使用的布尔值。 该脚本涵盖了几行,但我无法运行它。 我编写了其他可以正常工作的脚本,但是我对Groovy的了解甚少,而对Elastic search的了解却很少。 我可以用脚本找到的每个样本只有一行,只有一行。 所以基本上我将如何采用这个完全有效的脚本 并把它变成像 我对创建一个只写一