想做 GIS 功能,地图测绘和 openlayers 之类的框架应该怎么结合?(顺便有偿求指导)

2017-02-16 22:26:10 +08:00
 nonesuccess

之前提过一个帖子,大家教了一堆内容

https://www.v2ex.com/t/284987#reply26

现在能做到的:

找了个下载器,把百度、高德、谷歌之类的地图都下载成图片,然后按照一定规则放到了文件夹中,再重写 openlayers 的 xyz 函数,去文件夹中取图片,已经可以正常显示地图。

问题如下:

  1. 这种方式有什么缺点?是否有必要继续搭建 geoserver ?
  2. geoserver 中有 shp 格式的地图资源,看介绍理解就是瓦片图,但是这种 shp 格式的文件怎样制作才最简单?
  3. 比如我下载了 n 平方公里的地图,其中某几个方圆 1 平方公里的区域是重点区域,我们需要更细化的地图,那能否通过自行测绘的方式解决?比如我用无人机航拍,或者手头有 cad 图,怎样才能跟在高德或百度上下载的图片结合起来?我现在能想象到的形式就是先拍或者画一张巨大的图片,然后写脚本算坐标分割,但感觉麻烦了点。

另:是否有人愿意以有偿的方式提供咨询服务?针对以上问题以及后续开发中的问题,现在团队中没有了解 GIS 的人,各个方向都要踩坑,感觉有点步履艰难啊……愿意指导的,可发私信或者留联系方式。

谢谢大伙

5941 次点击
所在节点    程序员
38 条回复
Ricepig
2017-02-16 23:02:10 +08:00
1. 你的数据源如果都是来自于百度高德谷歌的瓦片(你称为图片的那些),那现在这种方式没什么大缺点。唯一的可能是百度高德谷歌图片叠合起来你看起来会有偏差叠不上。
2. geoserver 中的 shp 不是瓦片,是矢量内容(点的坐标、线的各个顶点坐标、多边形的顶点坐标)。但是浏览器一般无法处理这种矢量数据, geoserver 的一个作用就是把这些矢量图栅格化为图片,传给浏览器显示。
3. 栅格地图(包含你从谷歌百度高德下载的瓦片、还包括航拍、卫星图片)是一种很重要的 GIS 数据源,但是如果你需要查询、编辑、分析时,可能还会需要另一种数据——矢量数据,常用格式有你提到的 shp , cad 格式。你设想用航拍的方式是可以的,但是不是你想的用一张巨大图,而是无人机拍许多张图片,再回来拼一起。

其实各种地图的叠合有一个隐含的问题,就是坐标系的问题,如果这个没搞清楚,各种图是无法叠在一起的。
moyaka
2017-02-16 23:11:50 +08:00
作为 GISer 能在 V 站上看到和 GIS 有关的问题真开心:)
1.如果只是作为底图这样是可以的,只是底图更新了你也要再下载一遍,还有投影坐标是非常关键的这是一个坑,你提到这三个地图的地图刚好采取了三种不同的投影坐标。 GeoServer 是否需要那就要看你的后续需求,如果客户端有一些空间数据的交互查询等等是需要的,如果只是需要底图服务不用 GeoServer 就按照你说的也可以。
2.shp 格式是一种描述空间数据各种信息的数据结构和瓦片图不是一个东西,这种格式的文件可以用 ArcGIS for Desktop 制作,当然如果要做的比较简单可以用开源的 QGIS 。
3.自行测绘这个问题就比较复杂了关键是上面提到的投影坐标,测绘过程一般采用全站仪+控制点的方法。无人机航拍的影像需要经过控制点纠偏后才能使用, cad 转 shp 采用的比较多但是投影坐标也是关键,目前一般底图的制作是以测绘院制作的底图为蓝本辅以遥感数据并结合采集 POI 信息进行绘制,这个成本非常高。
4.可能说这个是多余的,在大陆非法测绘是违法的。如果测绘结果面向公众开放需要有测绘资质并经过审核。
learnshare
2017-02-17 00:17:20 +08:00
ArcGIS 自己绘制吧,可以直接导出到标准 GPS 坐标的地图上,国内地图有火星坐标,需要额外处理
RE
2017-02-17 03:08:03 +08:00
RE
2017-02-17 03:09:30 +08:00
@moyaka 外行人想请教一下 geo 和 gps 的关系, geo 是否就是常说的经纬度坐标?
PythonAnswer
2017-02-17 03:45:10 +08:00
先要搞定投影的问题.
nonesuccess
2017-02-17 09:25:36 +08:00
@Ricepig

@moyaka

我们不需要叠加地图,只需要在高德或者百度中选一种就行了。

需求 1 :我们选取一个街区,下载公开的地图,大部分内容都符合要求,但是由于地图信息滞后或者不精确等原因,在某个地方缺少一栋建筑。是否有简便的方法能补充上这个建筑?

需求 2 :在街区里面的某个小区是我们的重点管理对象,我们有与城建有关的部门提供的这个小区的 CAD 图(实际上不用自己测绘,也就不牵扯违法测绘的问题),用什么方法能把这个 CAD 图在我们的 GIS 程序中显示出来吗?

需求 3 :需要在鼠标指向小区内建筑的时候高亮、显示一些楼宇信息,这些我看 openlayers 提供的画多边形 api 就可以完成,如果用这种方法,那后面的问题就是多边形的顶点存在哪里,这是不是就涉及到 shp 格式的数据,或者 gis 数据库之类的?

谢谢!
moyaka
2017-02-17 09:30:29 +08:00
@RE 我不太明白你说的 geo 指代的是什么,如果是 GeoCoordinate(地理坐标)的话那是指用经度和纬度来表达位置的球面坐标。至于 GPS 我想你说的可能是指的 WGS-84 ,这是一种大地测量系统用大地经度和大地纬度来表示位置。理论上来说这两个不是一样的但是大部分人都搞混,如果只是需要经纬度的话影响不大。我不知道经纬度坐标是什么,不过我想应该可能就是指地理坐标。(我想我的解释可能让你觉得糊涂了)
kengle
2017-02-17 09:39:49 +08:00
@nonesuccess 可否说一下你说的那个地图下载器的名称
kengle
2017-02-17 09:44:26 +08:00
@moyaka 大神是否可以提供一下有偿的咨询服务, 我这边需要在内网搭建一个 GeoWebCache 这样的服务, 用来展示一个县级市的地图, 并用 openlayers 或 leafletjs 来加一些标记.
moyaka
2017-02-17 09:49:54 +08:00
@nonesuccess
1.补上是可以的,但是关键是之前说的投影坐标,如果你想画在底图上正确的位置那么你必须要知道底图的投影坐标是什么,就是你可能用到的高德或者百度地图的投影坐标 。
2.Cad 一般是转换成 shp 后再地图上显示,这个方案已经很成熟了。
3.对,小区内建筑的图层(也就是 Cad 转成 shp 的图层)显示是需要 shp 或者地理数据库的(取其一即可, shp 和地理数据库中的数据可以相互转化)。显示需要图层的属性信息也就是你说的建筑高度等绑定 mouse over 就可以显示 feature 的属性。多边形选择的话 openlayer 有一个 SelectFeature 的方法,多边形点存在 geometry 里面这个也需要 shp 或者地理数据库。
moyaka
2017-02-17 10:14:09 +08:00
@kengle
哈哈哈不是大神
下载器我在用水经注(这不是广告🐼)也有开源的下载器, GitHub 上我好像看到过。
你的需求里县级市的地图是有的么?如果是有的话,其它的需求并不复杂,只需要在内网显示地图并标注的话还不需要有偿咨询。
nonesuccess
2017-02-17 10:56:47 +08:00
@moyaka

1. cad 转 shp 有什么成熟的开源方案吗?
1. 我用高德地图做底图,在某个小区上显示用 cad 转的 shp 图层,这个方案可行吗?如果要解决坐标的问题,应该查哪些资料?
kengle
2017-02-17 11:02:16 +08:00
@moyaka 是这样的 我这边有个项目需要县级市地图上显示故障地点 然后好调配人员过去. 问题是这个东西只能部署在内网, 所以没法用高德这种公网上的服务了. 初步的想法是下载某个地图服务的瓦片数据, 然后用 leafletjs 去显示一下. 网上搜搜资料,看到说 GeoWebCache 可以用来干这种事情, 但是因为不是专业搞 GIS 的,看文档一头雾水, 项目又比较紧, 所以想咨询你一下. 可以的话加我一下, wechat id: roogle
suinia
2017-02-17 11:05:28 +08:00
@kengle 我们倒是之前本地测试搞过。有个软件可以把谷歌地图瓦片下载到本地。随便用 php 之类的写个接口读取图片。
leafletjs 调用打点。。。解决
murmur
2017-02-17 11:09:29 +08:00
国内的坐标和国际坐标不一样的 按照国家要求必须换算 也就是所谓的火星坐标系
这个火星坐标系到 GPS 坐标有开源近似换算,但是不一定准,省市没问题,到小区就起飞了
所以如果你没钱买自己的地图,用公开地图,还是用别人的封装和坐标吧

话说用下载器扒地图真不厚道
murmur
2017-02-17 11:12:12 +08:00
另外如果搞过地图的都知道,每个 zoomLevel 对应的层次显示都不一样,如果你用过省一级的地图,就知道那个分层多复杂,比如省界、市界、道路、桥、建筑,在每个层次显示的都要自己设置,非常复杂

地图的缩放可不是简单的图片缩放,这个工作量特大,综上还是直接找别人的地图用最简单
百度也没收你钱,也没限制你流量吧,难得的良心产品
moyaka
2017-02-17 11:19:19 +08:00
@nonesuccess
1.一定要是开源的话可以用 QGIS 转。

2.方案可行,但是涉及坐标困难很大 shp 图层的投影坐标要和高德一样才能完美叠加,高德用的投影坐标是 GCJ-02 是国测局的一个投影坐标,非线性加密。目前只有非官方的点纠偏算法。 shp 投影坐标转成 GCJ-02 因为没有官方的算法转起来很麻烦而且我之前的实践来看叠加的不太好。
要查资料的话关键字 WGS-84, GCJ-02 。

3.如果底图不需要太新的话个人推荐天地图,因为天地图的投影坐标是 CGCS-2000 和 WGS-84 只有极小的参数差别,误差基本可以忽略。缺点是地图数据更新太慢,配色巨丑。
moyaka
2017-02-17 12:02:22 +08:00
@kengle
如果只需要显示底图和打点的话其实并不需要 GeoWebCache 倒是用什么投影坐标比较关键,瓦片图按级别放文件夹里,按解析规则用 leaflet 就可以加载。
微信加不上,给你邮箱吧:cmVnaXMxODk0QHNpbmEuY29t 。
moyaka
2017-02-17 12:09:27 +08:00
@murmur
你让我想起了大学通宵画地图的恐惧。确实如果需求简单用百度或者高德的 api 就可以了,但是像他这样要把多边形 shp 叠到底图上如果还用百度或者高德的 api ,坑就太多了。
要用这种公开的底图我还是安利天地图,虽然很丑但是坐标几乎和 WGS-84 一样可以直接用,投影坐标的问题解决了其它坑都不算什么。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/341025

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX