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