标签: postgis

在 SQLModel 中使用 PostGIS 几何类型

是否可以在 SQLModel 创建的模型中使用 PostGIS 几何类型?如果是的话,该怎么办?

python postgis geoalchemy2 sqlmodel

1
推荐指数
1
解决办法
722
查看次数

带有 ST_GeomFromText 的 postgresql 查询不起作用

我正在尝试执行 Postgres 查询:

SELECT a.a_geom
FROM a
WHERE 
ST_within(a.a_geom::geometry,ST_GeomFromText('Polygon((1,1),(4,1),(4,4),(4,1))'));
Run Code Online (Sandbox Code Playgroud)

但是这个查询给出了错误:

错误:解析错误 - 无效的几何
SQL 状态:XX000
提示:“多边形((1,1”<--解析几何中位置 12 处的错误)

postgresql postgis geospatial spatial-query spatial-index

0
推荐指数
1
解决办法
2412
查看次数

无法转换org.postgresql.util.PGobject类型的对象

我在使用Hibernate Spatial和PostGIS时遇到问题.我有一个像这样的字段的实体:

public class LocationBean {
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private long id;

  @Type(type = "org.hibernate.spatial.GeometryType")
  private Point location;
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是我无法从数据库中加载任何这些实体,除非该实体的location为null.如果它不为null,我会收到以下错误:

Exception: Can't convert object of type org.postgresql.util.PGobject
javax.el.ELException: /protected/topPanel/searchBar.xhtml @27,57 completeMethod="#{toppanelbb.completeSearchBar}": java.lang.IllegalArgumentException: Can't convert object of type org.postgresql.util.PGobject
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:111)
at org.primefaces.component.autocomplete.AutoComplete.broadcast(AutoComplete.java:337)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:931)
at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:344)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:70)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
at org.glassfish.tyrus.servlet.TyrusServletFilter.doFilter(TyrusServletFilter.java:253)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
at org.ocpsoft.rewrite.servlet.RewriteFilter.doFilter(RewriteFilter.java:205)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
at …
Run Code Online (Sandbox Code Playgroud)

postgresql hibernate jpa postgis hibernate-spatial

0
推荐指数
1
解决办法
3248
查看次数

为什么我不知道PostgreSQL数据库上是否正确安装了PostGIS?

我在PostgreSQL中绝对是新手,我正在按照本教程检查我的PostgreSQL安装是否安装了PostGIS扩展.

这是教程:https://www.a2hosting.com/kb/developer-corner/postgresql/determining-the-postgresql-and-postgis-versions

我正在使用PostgreSQL 9.6.1.

所以我可以通过命令行访问我的PostgreSQL,并执行了以下命令:

SELECT PostGIS_full_version();
Run Code Online (Sandbox Code Playgroud)

这是获得的输出:

C:\ Users\Andrea> pasql -u admin'pasql'未被识别为内部或外部命令,可运行程序或批处理文件.

C:\Users\Andrea>psql -U postgres
psql (9.6.1)
ATTENZIONE: Il code page della console (850) differisce dal code page
            di Windows (1252). I caratteri a 8-bit potrebbero non
            funzionare correttamente. Vedi le pagine di riferimento
            psql "Note per utenti Windows" per i dettagli.
Digita "help" per avere un aiuto.

postgres=# SELECT PostGIS_full_version();
ERROR:  function postgis_full_version() does not …
Run Code Online (Sandbox Code Playgroud)

database postgresql rdbms postgis postgresql-9.6

0
推荐指数
1
解决办法
1449
查看次数

PostGIS ST_Distance_Spheroid 或Haversine

ST_Distance_Spheroid在 PostgreSQL(使用 Postgis)中使用来计算沃金和爱丁堡之间的距离,如下所示:

CREATE TABLE pointsTable (
    id serial NOT NULL,
    name varchar(255) NOT NULL,
    location Point NOT NULL,
    PRIMARY KEY (id)
);

INSERT INTO pointsTable (name, location) VALUES 
( 'Woking', '(51.3168, -0.56)' ),
( 'Edinburgh', '(55.9533, -3.1883)' );

SELECT ST_Distance_Spheroid(geometry(a.location), geometry(b.location), 'SPHEROID["WGS 84",6378137,298.257223563]')
FROM pointsTable a, pointsTable b
WHERE a.id=1 AND b.id=2;
Run Code Online (Sandbox Code Playgroud)

我得到了 592 公里(592,053.100454442 米)的结果。

不幸的是,当我使用网络上的各种来源进行相同的计算时,我始终在 543 公里附近,相差 8.2%。

幸运的是,第三个消息来源澄清说他们使用的是半正弦公式。我不确定其他两个来源。

我在查询中做错了什么还是因为使用的公式不同?如果是这样,哪个计算最接近乌鸦可以飞行的最短距离,保持恒定的高度?

postgis haversine

0
推荐指数
1
解决办法
1133
查看次数

PostgreSQL遍历数百万条记录?

我有一个表“ location_signals”,其中包含约2.5亿条记录,在ID字段上有一个索引。该表具有ID,时间戳,纬度和经度(以及其他几个未使用的列)。每个ID可以包含数千个带有不同时间戳的纬度/经度条目。我有一个传递ID的例程,它会获取该ID的所有记录,然后返回一个最高纬度/经度的圆圈。

当我们有一万条记录时,上面的方法工作得很好,但是当我们导入更多数据时,它再也无法处理了。逻辑如下:

  • 使用“按ID从location_signals组中选择ID”选择唯一ID(仅限1500),这里的一个问题是数据时间戳不是理想的格式,因此可以这样做:

       SELECT TO_TIMESTAMP(timestamp, 'MM/DD/YY HH24:MI') AS ts, * 
        FROM  location_signals 
        WHERE (
        extract(hour from TO_TIMESTAMP(timestamp, 'MM/DD/YY HH24:MI')) > '18' 
        OR  extract(hour from TO_TIMESTAMP(timestamp, 'MM/DD/YY HH24:MI')) < '06'  
        )
        AND \"DID\" = '$did'
    
        LIMIT 1500
    
    Run Code Online (Sandbox Code Playgroud)
  • 将ID传递给例程

我认为问题是因为遍历数百万个时间戳的问题,或者其他一些问题。任何输入将不胜感激。也许还分批处理?如果是这样,怎么办?

php sql postgresql postgis

0
推荐指数
1
解决办法
59
查看次数


Laravel - 未连接到 docker 上的数据库

我正在尝试使用 postgres db 运行 Laravel。Docker 构建工作正常,我可以通过 url 访问应用程序,并且可以连接到数据库。但 laravel 无法建立与数据库的连接。

我使用 phpstorm 客户端与数据库的连接有效: 在此输入图像描述

但是当我在 env 文件中使用相同的凭据时:

在此输入图像描述

然后我有以下错误。

Doctrine\DBAL\Driver\PDOException : SQLSTATE[08006] [7] 无法连接到服务器:连接被拒绝 服务器是否在主机“127.0.0.1”上运行并接受端口 5432 上的 TCP/IP 连接?

在 /var/www/html/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:31 27| 父::__construct($dsn, (字符串) $user, (字符串) $password, (数组) $options); 28| $this->setAttribute(PDO::ATTR_STATEMENT_CLASS, [PDOStatement::class, []]); 29| $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 30| } catch (\PDOException $异常) {

31| 抛出新的 PDOException($Exception); 32| } 33| } 34| 35| /**

Docker 配置: docker-compose

version: '3'
services:
  postgis:
    image: postgis/postgis
    volumes:
      - ./postgres/init.sql:/docker-entrypoint-initdb.d/init.sql
    environment:
      POSTGRES_USER: admin_db
      POSTGRES_PASSWORD: test123
    ports:
      - '5432:5432' …
Run Code Online (Sandbox Code Playgroud)

postgresql postgis laravel docker

0
推荐指数
1
解决办法
1537
查看次数

如何从头开始为我的城市建立地图

嗨,我想知道像谷歌地图的地图是如何爬行的.要完成这样的任务,比如从头开始为我的城市建立我自己的地图.

gis postgis

-1
推荐指数
1
解决办法
1367
查看次数

适用于Google BigQuery的PostGIS可用性

有没有计划将PostGIS功能添加到Google BigQuery?它将成为一个非常强大的GIS分析工具,看起来很自然(除了并行化问题).

postgis google-bigquery

-2
推荐指数
1
解决办法
408
查看次数

MakeValid不适用于单个模型对象

我正在尝试MakeValid修复(验证)我的几何字段.
我可以通过获取和更新单行来使其工作:

from django.contrib.gis.db.models.functions import MakeValid

MyModel.objects.filter(id=<id>).update(polygon=MakeValid('polygon'))
Run Code Online (Sandbox Code Playgroud)

但是对于某些情况,我必须更新polygon已经在函数中实例化的单个模型对象(意味着我已经完成了.filter/ .get),这给了我以下错误:

// np is an object of MyModel which has a field 'polygon' which is `MultiPolygon` django model field
np.polygon = MakeValid(np.polygon)
// np.save()
TypeError: Cannot set MyModel SpatialProxy (MULTIPOLYGON) with value of type: <class 'django.contrib.gis.db.models.functions.MakeValid'>
Run Code Online (Sandbox Code Playgroud)

这里,MakeValid(np.polygon)不返回MultiPolygon对象.相反,它返回一个django.contrib.gis.db.models.functions.MakeValid包装器.

我可以从中获取Geometry对象MakeValid吗?

python django postgis django-views geodjango

-8
推荐指数
1
解决办法
921
查看次数