Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PostgreSQL-PostGIS(扩展)的地理类型函数时出现的问题_Sql_Postgresql_Function_Geolocation_Postgis - Fatal编程技术网

使用PostgreSQL-PostGIS(扩展)的地理类型函数时出现的问题

使用PostgreSQL-PostGIS(扩展)的地理类型函数时出现的问题,sql,postgresql,function,geolocation,postgis,Sql,Postgresql,Function,Geolocation,Postgis,问题是 我最近安装了带有postGIS扩展的postgresql(带函数) 我用一些地理数据建立了一个小的数据库模型 实际上,我正在尝试将一些地理数据插入其中,并在其中使用函数。。。像点/多边形/ 问题是,当我尝试使用postGis功能时,比如ST_Area、ST_Permiture。。。PostgreSQL始终返回错误。如果我是对的,大多数是42P01,意思是“未知表格”。但是桌子是存在的 下面是我实际测试数据库的屏幕截图: 您可以在屏幕截图上看到,postGIS扩展在我当前的模型上处于活动

问题是

我最近安装了带有postGIS扩展的postgresql(带函数) 我用一些地理数据建立了一个小的数据库模型

实际上,我正在尝试将一些地理数据插入其中,并在其中使用函数。。。像点/多边形/

问题是,当我尝试使用postGis功能时,比如ST_Area、ST_Permiture。。。PostgreSQL始终返回错误。如果我是对的,大多数是42P01,意思是“未知表格”。但是桌子是存在的

下面是我实际测试数据库的屏幕截图:

您可以在屏幕截图上看到,postGIS扩展在我当前的模型上处于活动状态(此扩展的1050功能在此模型中可用)

我这样插入数据:

INSERT INTO "Base".points (point,lat,lng) VALUES ("Base".ST_GeographyFromText('POINT(45.5555 32.2222)'),'45.5555','32.2222');
and
INSERT INTO "Base".polygons (polygon) VALUES ("Base".ST_GeographyFromText('POLYGON((x y,x1 y1,x2 y2,x y))'));
对于表点,我有一个串行字段(id)、一个地理字段(点)和两个文本字段(lat、lng)。 对于表格多边形,我有一个序列字段(id)和一个地理字段(多边形)

以下是我试图提出的两个问题:

SELECT "Base".ST_Area(polygon) FROM "Base".polygons WHERE id=1
or
SELECT "Base".ST_Perimeter(polygon) FROM "Base".polygons WHERE id=1
这两个测试不起作用。它们返回错误42P01

当尝试在我的表“points”上测试另一个函数时,也会失败,但会返回一条奇怪的消息。我想说的是:

SELECT "Base".ST_Distance((SELECT point FROM "Base".points WHERE id=1),(SELECT point FROM "Base".points WHERE id=2))
此函数存在,但返回错误消息SQL state:42883,消息为:

ERROR : function _st_distance("Base".geography, "Base".geography, numeric, boolean) does not exist
我不发送任何数字或布尔值。。。我无法解释这些错误是从哪里来的

我不得不说我是新来的postgresql。。。问题可能来自于这个


感谢阅读/Help

[提示-发布您的CREATETABLE语句,这样我们就可以看到列的实际类型了]

我认为您的问题是因为您使用的是
geography
数据类型,而不是
geometry
;并非所有函数(完全或使用相同的参数)都适用于地理类型。这篇文章解释了原因——简而言之

如果您进行了大量测量,例如,必须比较 如果是大型多边形,使用地理信息而不是 几何学

要了解哪些函数需要哪些参数,请检查。它会告诉你

浮式街区(几何g1)

平面ST_区域(地理地理地理,布尔使用球体=真)

所以你可以看到st_area有两个版本。一个接受几何图形作为参数,另一个接受地理,但您还必须添加另一个参数

如果“多边形”是地理类型,则需要

SELECT "Base".ST_Area(polygon, TRUE) FROM "Base".polygons WHERE id=1
-- true will measure around the geography spheroid and is more accurate
-- than false - read the documentation for what you need!
st_周界与此类似

关于您在st_distance上的错误,您是否看到错误消息中“st_distance”之前的下划线?我怀疑您遇到了问题,因为您在模式中创建了postgis扩展。在PGAdmin中,查看函数“ST_distance”。您会看到它依次调用函数“\u st\u distance”-它找不到,因为在您的例子中,函数位于不同的模式中。试着这样做:

CREATE EXTENSION postgis
我想这会让你免于痛苦


最后,我认为您的st_geographyfromtext中的lat和lon参数是错误的(但我可能是错误的)。

[提示-发布您的create table语句,这样我们就可以看到列的实际类型了]

我认为您的问题是因为您使用的是
geography
数据类型,而不是
geometry
;并非所有函数(完全或使用相同的参数)都适用于地理类型。这篇文章解释了原因——简而言之

如果您进行了大量测量,例如,必须比较 如果是大型多边形,使用地理信息而不是 几何学

要了解哪些函数需要哪些参数,请检查。它会告诉你

浮式街区(几何g1)

平面ST_区域(地理地理地理,布尔使用球体=真)

所以你可以看到st_area有两个版本。一个接受几何图形作为参数,另一个接受地理,但您还必须添加另一个参数

如果“多边形”是地理类型,则需要

SELECT "Base".ST_Area(polygon, TRUE) FROM "Base".polygons WHERE id=1
-- true will measure around the geography spheroid and is more accurate
-- than false - read the documentation for what you need!
st_周界与此类似

关于您在st_distance上的错误,您是否看到错误消息中“st_distance”之前的下划线?我怀疑您遇到了问题,因为您在模式中创建了postgis扩展。在PGAdmin中,查看函数“ST_distance”。您会看到它依次调用函数“\u st\u distance”-它找不到,因为在您的例子中,函数位于不同的模式中。试着这样做:

CREATE EXTENSION postgis
我想这会让你免于痛苦


最后,我认为您的st_geographyfromtext中的lat和lon参数是错误的(但我可能是错误的)。

[提示-发布您的create table语句,这样我们就可以看到列的实际类型了]

我认为您的问题是因为您使用的是
geography
数据类型,而不是
geometry
;并非所有函数(完全或使用相同的参数)都适用于地理类型。这篇文章解释了原因——简而言之

如果您进行了大量测量,例如,必须比较 如果是大型多边形,使用地理信息而不是 几何学

要了解哪些函数需要哪些参数,请检查。它会告诉你

浮式街区(几何g1)

平面ST_区域(地理地理地理,布尔使用球体=真)

所以你可以看到st_area有两个版本。一个接受几何图形作为参数,另一个接受地理,但您还必须添加另一个参数

如果“多边形”是地理类型,则需要

SELECT "Base".ST_Area(polygon, TRUE) FROM "Base".polygons WHERE id=1
-- true will measure around the geography spheroid and is more accurate
-- than false - read the documentation for what you need!
st_周界与此类似

关于您在st_distance上的错误,您是否看到错误消息中“st_distance”之前的下划线?我怀疑您遇到了问题,因为您在模式中创建了postgis扩展。在PGAdmin中,有一个