GIS开发与应用(PostgreSQL空间数据库各种查询语句范例以及SQL语句查询空间关系)

2 篇文章 0 订阅
2 篇文章 0 订阅


实验目的:

1、熟悉PostGIS空间数据库;
2、掌握利用PG进行空间数据操作;
3、熟悉PG空间函数;


实验准备

Windows操作系统、Postgresql、postgis、nyc矢量文件rar
实验数据下载链接:
nyc矢量文件.rar


实验内容及要求

  1. 创建空间数据库nyc,在nyc空间数据库中创建geometries表,对表中插入Point、Linestring、Polygon、PolygonWithHole、collection等几何要素。

  2. 查看geometries表中的几何图形的元数据:
    使用ST_GeometryType(geometry):返回几何图形的类型;ST_NDims(geometry):返回几何图形维数;ST_SRID(geometry):返回几何图形的空间参考标识码。

  3. 查看geometries表多边形的图形信息
    SQL语句:SELECT ST_AsText(geom) FROM geometries WHERE name LIKE 'Polygon%';

  4. 导入nyc_census_blocks、nyc_neighborhoods、nyc_streets、nyc_subway_stations等矢量文件。根据以上数据解决以下问题
    ①’West Village’社区(neighborhood)的面积是多少?
    提示:面积以平方米为单位。
    要得到一个以公顷为单位的面积,需要再对其除以10000;
    要得到一个以英亩为单位的面积,需要对其除以4047。

    ②曼哈顿(Manhattan)的面积是多少英亩?
    提示:nyc_census_blocks和nyc_neighborhoods中都有boroname - rorough name - 行政区名

    ③纽约市(New York)的街道总长度(公里)是多少?
    提示:空间数据的测量单位是,1公里=1000m
    提示:ST_Length(geom)

    ④"West Village’边界的JSON表示是怎样的?
    提示:ST_AsGeoJSON(geom)

  5. 根据4中的数据解决以下空间关系问题。

    ①名为"Atlantic Commonts"的街道的geometry值是什么?
    提示:ST_AsText(geometry)

    ②’Broad St’地铁站处于哪一个区域?
    提示:ST_Intersects(geometry,geometry)

    ③计算’Broad St’和’Nevins St’两个地铁站直接的距离。
    提示:ST_Distance(geometry,geometry)

    ④找出’Broad St’地铁站10米范围内的所有街道。
    提示:ST_Dwithin(geometry,geometry,distance)


实验过程及步骤:

1、创建空间数据库nyc,在nyc空间数据库中创建geometries表,对表中插入Point、Linestring、Polygon、PolygonWithHole、collection等几何要素。

1


2、查看geometries表中的几何图形的元数据。

使用ST_GeometryType(geometry):返回几何图形的类型;

2


使用ST_NDims(geometry):返回几何图形维数;

3


使用ST_SRID(geometry):返回几何图形的空间参考标识码。

4


3、查看geometries表多边形的图形信息。

SQL语句:SELECT ST_AsText(geom) FROM geometries WHERE name LIKE 'Polygon%';
5


4、导入nyc_census_blocks、nyc_neighborhoods、nyc_streets、nyc_subway_stations等矢量文件。 根据下图数据解决以下问题。

6

'West Village'社区(neighborhood)的面积是多少?

注意:面积以平方米为单位;
7


要得到一个以公顷为单位的面积,需要再对其除以10000
8


要得到一个以英亩为单位的面积,需要对其除以4047
9


② 曼哈顿(Manhattan)的面积是多少英亩?

提示:nyc_census_blocks和nyc_neighborhoods中都有boroname - rorough name - 行政区名
10


③ 纽约市(New York)的街道总长度(公里)是多少?(提示:空间数据的测量单位是米,每公里有1000米)

提示:ST_Length(geom)
11


"West Village"边界的JSON表示是怎样的?

提示:ST_AsGeoJSON(geom)
12
完整结果:
{"type":"MultiPolygon","coordinates":[[[[583263.277659584,4509242.626023987],[583276.819906863,4509378.825446927],[583473.970960668,4509359.908944457],[583491.192260595,4509436.712101899],[583162.105573362,4509573.023287381],[583183.76292118,4509612.891701841],[583504.900373906,4509468.566869254],[583533.730272909,4509585.126406943],[583541.023197051,4509651.251073344],[583282.008654078,4509632.486606753],[583281.533887219,4509674.748429338],[583540.695778205,4509680.306080814],[583544.237980713,4509722.613197348],[583535.72484875,4509764.78446308],[583294.648844622,4509759.43009883],[583300.379681076,4509785.911472392],[583535.427203423,4509791.198110681],[583538.522863303,4509873.125708335],[583317.51254869,4509870.638359524],[583329.18165868,4509905.111607115],[583542.12448063,4509910.150107043],[583543.389429966,4509976.20688658],[583338.306958854,4509987.106862172],[583335.94145858,4510018.780658739],[583548.881014022,4510023.819403051],[583544.758100265,4510211.333753768],[583341.869402998,4510206.407989682],[583347.36205056,4510254.020356839],[583542.284574586,4510252.516427664],[583547.4483807,4510329.184002983],[583438.959078394,4510327.961884845],[583440.611305951,4510359.680905153],[583498.873829468,4510360.337047188],[583441.84719336,4510428.379068074],[583443.410155272,4510468.022196671],[583579.75565117,4510493.33384979],[583587.195917015,4510546.251834389],[583358.52614421,4510511.975929038],[583358.258767962,4510535.748236739],[583592.984585184,4510567.450755248],[583596.257726282,4510633.530279973],[583359.525036557,4510601.805025731],[583359.317068904,4510620.294600859],[583602.046291112,4510654.729212196],[583601.718528224,4510683.784265051],[584454.921019424,4510273.151246954],[584352.745014016,4510049.939239385],[584296.288829336,4509964.920445205],[584278.671791656,4509880.343595843],[584017.076215618,4509266.760846779],[584008.125670374,4509162.296346837],[583263.277659584,4509242.626023987]]]]}


5、 根据4中的数据解决以下空间关系问题。

① 名为"Atlantic Commonts"的街道的geometry值是什么?

提示:ST_AsText(geometry)
13
完整结果:
MULTILINESTRING((586781.7015777241 4504202.153143394,586863.5196448397 4504215.988170098))


Broad St地铁站处于哪一个区域?

提示:ST_Intersects(geometry,geometry)
14
结果:POINT(583571.9059213118 4506714.341192182)

15


③ 计算Broad StNevins St两个地铁站直接的距离。

提示:st_Distance(geometry,geometry)
16

首先确定好Nevins St地铁站的坐标:POINT(586114.6490996698 4504702.753423779);

17


④ 找出Broad St地铁站10米范围内的所有街道。

提示:ST_Dwithin(geometry,geometry,distance)
18
如果这篇文章对你和你的同学有帮助,可以点赞关注多多支持哦~~
学习学习学习!!!

  • 7
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
好的,以下是十条空间查询的中文语句与对应的postgreSQL数据库SQL语句: 1. 查找指定区域内所有的设施:SELECT * FROM facilities WHERE ST_Intersects(geom,ST_GeomFromText('POLYGON((lon1 lat1,lon2 lat2,lon3 lat3,lon4 lat4,lon1 lat1))',4326)); 2. 查找与指定最近的5个商店:SELECT * FROM stores ORDER BY ST_Distance(geom,ST_GeomFromText('POINT(lon lat)',4326)) LIMIT 5; 3. 查找所有位于指定行政区域内的房屋:SELECT * FROM houses WHERE ST_Within(geom, (SELECT geom FROM areas WHERE name = '行政区域名称')); 4. 查找距离指定不超过500米的所有社区服务设施:SELECT * FROM community_facilities WHERE ST_DWithin(geom,ST_GeomFromText('POINT(lon lat)',4326),500); 5. 查找所有距离指定路线不超过500米的公园:SELECT * FROM parks WHERE ST_DWithin(geom, (SELECT ST_Collect(geom) FROM roads WHERE road_name = '路线名称'),500); 6. 查找所有距离指定建筑物超过200米的古迹:SELECT * FROM historic_sites WHERE ST_Distance(geom,(SELECT geom FROM buildings WHERE building_name = '建筑物名称'))>200; 7. 查找所有位置在指定自然保护区内的动物:SELECT * FROM animals WHERE ST_Within(geom, (SELECT geom FROM nature_reserve WHERE name = '自然保护区名称')); 8. 查找所有距离指定城市中心不超过1000米的酒店:SELECT * FROM hotels WHERE ST_Distance(geom,(SELECT geom FROM city_centers WHERE city_name = '城市名称'))<1000; 9. 查找所有距离指定河流不超过200米的钓鱼:SELECT * FROM fishing_spots WHERE ST_DWithin(geom, (SELECT geom FROM rivers WHERE river_name = '河流名称'),200); 10. 查找所有距离指定机场跑道不超过300米的航空公司办公室:SELECT * FROM airlines_offices WHERE ST_DWithin(geom, (SELECT ST_Collect(runway_geom) FROM airports WHERE airport_name = '机场名称'),300); 希望能够帮助到你。如果还有其他问题,可以随时问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zzq_Fighting

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值