Questions tagged «postgis»

PostGIS是PostgreSQL对象关系数据库的扩展,增加了对地理对象的支持。

4
我在postgis安装中找不到shp2pgsql
我已经按照本指南安装了postgis 。一切都OK。 SELECT postgis_full_version(); "POSTGIS="2.1.7 r13414" GEOS="3.4.2-CAPI-1.8.2 r3921" PROJ="Rel. 4.8.0, 6 March 2012" GDAL="GDAL 1.10.1, released 2013/08/26" LIBXML="2.9.1" LIBJSON="UNKNOWN" TOPOLOGY RASTER" 但是我没有看到shp2pgsql,/usr/lib/postgresql/9.4/bin如您所见: foo@bar:/usr/lib/postgresql/9.4/bin$ ls clusterdb initdb pg_dump pg_standby psql createdb oid2name pg_dumpall pg_test_fsync reindexdb createlang pg_archivecleanup pg_isready pg_test_timing vacuumdb createuser pg_basebackup pg_receivexlog pg_upgrade vacuumlo dropdb pgbench pg_recvlogical pg_xlogdump droplang pg_controldata …


2
从3维几何转换为2维
我有一个Point表,其中的几何列同时包含3维和2维值。我想将此3维几何转换为2维.PostGIS中是否有任何功能?请帮我解决这个问题。 关于Sreesha.TA

3
在OpenLayers中显示PostGIS栅格的选项
这个问题类似于先前关于在网络地图中显示矢量数据的问题。我想要一个使用OpenLayers的基本Web界面,并可以使用诸如Google的底图显示PostGIS中当前的栅格数据。我已经将PostGIS2.0与栅格库一起安装,并从文档中看到有多个输出数据的选项,例如JPEG,GeoTIFF和PNG。是他们推荐的格式吗? 为了显示矢量数据,我目前正在使用javascript从用户浏览器向我的服务器发送坐标,然后在PostGIS上使用PHP / SQL执行查询。然后将结果作为GeoJSON返回,可以覆盖在底图上。我想知道是否可以使用栅格应用类似的方法,但是我不知道哪种栅格格式是最好的,或者我是否应该考虑其他约束。 我已经看到了很多有关GeoServer的参考,但是我不确定该项目是否必要(我不确定何时应使用GeoServer)。

2
在PostGIS中清洗几何?
我正在尝试在一些非常大的多边形图层上进行一些处理。但是我遇到了各种几何错误,例如: NOTICE: Ring Self-intersection at or near point 470396.52017068537 141300.52235257279 CONTEXT: PL/pgSQL function st_intersection(geometry,raster,integer) line 10 at RETURN QUERY SQL function "st_intersection" statement 1 NOTICE: Ring Self-intersection at or near point 504154.61769969884 140782.04115761846 CONTEXT: PL/pgSQL function st_intersection(geometry,raster,integer) line 10 at RETURN QUERY SQL function "st_intersection" statement 1 NOTICE: Ring Self-intersection …

2
点如何不在多边形内或没有触摸但仍与多边形相交?
我正在使用人口普查shapefile(多面体),并且还有另一个带有点的表。我们记录每个点所在的人口普查块。我有一个点对所有ST_Within和ST_Touches查询都返回false。但是,它对一个块的ST_Intersects返回true。 如果是另一个多边形,我可以理解这种情况将如何发生,但是对于“相交”而言,单点(我已经证实是这种情况)如何成立,而对于“内部”和“接触”而言,则分别为否?在QGis中检查它似乎应该为Touches返回true。 我们的表中有数百万个点,只有这一个点似乎有任何问题。我已经在多边形和点上都运行了ST_IsValid。 我对几何数据还很陌生。我是否缺少有关其工作原理的信息? 和多边形块(geoid:“ 170898507021157”) SELECT ST_Within(pt, geom), ST_Touches(pt, geom), ST_Intersects(pt, geom) FROM ( VALUES ( ST_SetSRID( ST_GeometryFromText($$MULTIPOLYGON(((-88.466933 42.139013,-88.464586 42.139034,-88.463821 42.13901,-88.463811 42.138813,-88.463815 42.138705,-88.46382 42.138572,-88.463849 42.138468,-88.463886 42.138398,-88.464044 42.138452,-88.464239 42.138464,-88.464616 42.138472,-88.464961 42.138468,-88.465318 42.13846,-88.465558 42.138464,-88.465695 42.138443,-88.465824 42.138402,-88.465969 42.138319,-88.466048 42.138248,-88.466106 42.138161,-88.466135 42.138057,-88.466148 42.1379,-88.466149 42.137731,-88.466143 42.137406,-88.466143 42.137086,-88.466131 42.136945,-88.466098 42.13685,-88.466027 42.136746,-88.46596 42.136677,-88.465799 42.136609,-88.465571 42.136559,-88.465359 42.136534,-88.465167 …
11 postgis 

1
在已经处于目标srid的几何中调用ST_Transform?
我正在编写一个函数,该函数的几何参数可以在不同的投影中: CREATE OR REPLACE FUNCTION foo(in geometry) RETURNS boolean AS $$ DECLARE transformed_geom geometry := in; BEGIN IF ST_SRID(transformed_geom) != 32737 THEN transformed_geom := ST_Transform(transformed_geom, 32737); END IF; [ ... ] END; $$ language plpgsql; 该函数需要特定投影中的几何图形(32737),但我不想让调用者进行转换,我更喜欢在函数内部进行处理。 问题是,始终检查ST_Transform是安全的,而不是检查实际的srid 。如果几何已经在目标投影中,该怎么办? 我检查了这样的查询,它看起来很安全,但是如果有人可以确认这一点就很棒了,因为我在文档中没有看到它。 SELECT ST_AsEWKT(geom), ST_AsEWKT(ST_Transform(geom, 32737)) FROM table_in_32737;
11 postgis  srid 

1
选择边界框内的所有点
我以前曾问过这个问题,但我尝试的答案却无效。 我想查询边界框内的所有OSM方式。OSM数据是使用默认的球形墨卡托导入的。我正在使用LAT / LON查询,因此转换 SELECT * FROM planet_osm_ways WHERE ST_Transform( ST_MakeEnvelope(37.808264, 37.804339, -122.275244, -122.271189, 4326),3857 ); 运行此命令时,出现以下错误: 错误:WHERE的参数必须为布尔型,而不是几何第3行:WHERE ST_Transform(ST_MakeEnvelope(37.808264,37.804339,-12 ...

1
如何在QGIS中加快PostGIS图层的同时工作?
我们同时在一个较大的层上工作(10-20人)。我们中的一些人使用QGIS 2.8.1和其他2.6。使用2.8的用户会发生很多崩溃(QGIS)。2.6用户没有崩溃,但是添加功能真是令人难以置信的缓慢。Postgres 9.4服务器在带有Win7的虚拟机(Hyper V)上运行。也许是网络而不是QGIS?也许有人有一个主意。会很好 :)

2
地图匹配的GPS指向道路网络!
我对Postgres和PostGIS很陌生。 我正在尝试对一些GPS点进行简单的地图匹配(如果需要,也可以进行路径推断)。我正在使用postgres(postgis)。 我的数据库中有一个表,其中包含我的GPS点: gpspoints(纬度,经度,时间,速度,方位角,几何形状,...) 我也将道路网络的shapefile导入到我的数据库中: 路线(gid,idrte,version,nomrte,norte,clsrte,geom等)-我没有链接的方位角,而我不知道如何使用postgis函数ST_azimuth计算它。我所拥有的只是道路网的shapefile,其中包含上面列举的列。 仅当链接的方向与GPS点的方位角(+或-15度)一致并检索投影位置时,我才想将每个GPS点关联到最近的链接(在该点周围20米的缓冲区中)。否则,我希望它在20米缓冲区内搜索具有可接受方位角的NEXT最近的链接!(就像图片一样!) 我希望将投影GPS点的新坐标以“ projectedLat”和“ projectedLong”的形式添加到表“ gpspoints”中。 (在下图中,实际点是使用方向显示的,而投影点没有任何方向标记)

1
将多个shapefile批量加载到Postgis
根据shp2pgsql帮助,选项drop,append,create和prepare是互斥的。因此,如果我想从形状创建表,然后附加多个其他shapefile,我将执行以下操作,并保留一个计数器以指示我们处于创建还是附加模式。 cnt=0 for shp in $(ls *.shp); do if [ $cnt -eq 0 ] ; then shp2pgsql -s 27700 -c $shp schema.table_name | psql -h localhost db else shp2pgsql -s 27700 -a $shp schema.table_name | psql -h localhost db fi ((cnt++)) done 这可以按预期工作,但我经常想知道是否有更简单的方法?

2
匀称地阅读Postgis几何
我正在ipython Notebook中使用geopandas和shape进行小型工作流,​​有时从shapefile,有时从postgis(执行更昂贵的处理)中提取一堆地理空间数据。 现在,我使用将该postgis表拖入python中sqlalchemy,并一路将几何体转换为WKT,得到如下结果: sql = """ SELECT ST_AsText(ST_Transform(the_geom,4326)) as newgeom,* FROM public.parcels2010_small limit 5; """ parcels = pd.read_sql(sql, engine) parcels +----+---------------------------------------------------+---------------------------------------------------+-----------+-------------+ | id | newgeom | the_geom | parcel_id | osm_node_id | +----+---------------------------------------------------+---------------------------------------------------+-----------+-------------+ | 0 | MULTIPOLYGON(((-122.991093691444 38.4878691106... | 01060000209C0E00000100000001030000000100000097... | 1805792 | 66237 | +----+---------------------------------------------------+---------------------------------------------------+-----------+-------------+ | 1 | MULTIPOLYGON(((-122.444576448624 …

1
使用PostGIS沿极包裹海岸线进行点采样
我正在执行一项任务,要求我在海岸线上每1000公里获取一次采样点,并且遇到了南极洲的问题。据我所知,在函数中使用几何图形似乎是一个问题,而实际上我认为应该将地理信息用于此操作。 使用这个非常相似的问题中的函数,我可以产生如下所示的结果:。 如您所见,ST_AddMeasure()并且ST_LocateAlong()似乎没有球形地处理几何,这导致许多点位于南极上。甚至沿日期线(左侧)在剪辑上添加了一个点。根据这两个函数的文档,只能使用几何。 可以在此处找到用于生成多边形和点的代码,但这是用于生成点的SQL: CREATE TABLE atest AS WITH line AS (SELECT id, ST_ExteriorRing((ST_Dump(geom)).geom) AS geom FROM line_sample_test), linemeasure AS (SELECT ST_AddMeasure(line.geom, 0, (ST_Length(line.geom))::int) AS linem, generate_series(0, (ST_Length(line.geom))::int, 10) AS i FROM line), geometries AS ( SELECT i, ST_LocateAlong(linem, i) AS geom FROM linemeasure) SELECT * from geometries; 如何在此海岸线上每1000公里产生一个点?

1
GeoServer ImageMosaic PostGIS索引更新
我使用GeoServer在此手册下创建ImageMosaic存储的位置。当我创建一个新的数据存储时,所有*.tif文件都被索引到数据库(带PostGIS的PostgreSQL)中。当我将新的geotiff放入我的数据文件夹,或在数据库中重新索引所有geotiff文件时,如何在数据库中创建新的索引条目? 我的配置文件: datastore.properties: SPI=org.geotools.data.postgis.PostgisNGDataStoreFactory host=localhost port=5432 database=GeoServerRaster schema=public user=geoserver passwd=******* Loose\ bbox=true Estimated\ extends=false validate\ connections=true Connection\ timeout=10 preparedStatements=true indexer.properties: Caching=false TimeAttribute=ingestion ElevationAttribute=elevation Schema=*the_geom:Polygon,location:String,ingestion:java.util.Date,elevation:Integer PropertyCollectors=TimestampFileNameExtractorSPI[timeregex](ingestion),DoubleFileNameExtractorSPI[elevationregex](elevation) timeregex.properties: regex=[0-9]{8}T[0-9]{6}Z(\?!.\*[0-9]{8}T[0-9]{6}Z.\*) levationregex.properties: regex=(?<=_)(\\d{1,5})(?=_) 目录中的文件: tc_10000_20140807T033115Z.tif tc_10000_20140807T040046Z.tif tc_10000_20140807T043115Z.tif ...


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.