V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nonesuccess
V2EX  ›  程序员

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

  •  
  •   nonesuccess · 2017-02-16 22:26:10 +08:00 · 6168 次点击
    这是一个创建于 2841 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    现在能做到的:

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

    问题如下:

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

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

    谢谢大伙

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

    其实各种地图的叠合有一个隐含的问题,就是坐标系的问题,如果这个没搞清楚,各种图是无法叠在一起的。
    moyaka
        2
    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
        3
    learnshare  
       2017-02-17 00:17:20 +08:00 via Android
    ArcGIS 自己绘制吧,可以直接导出到标准 GPS 坐标的地图上,国内地图有火星坐标,需要额外处理
    RE
        4
    RE  
       2017-02-17 03:08:03 +08:00 via iPhone
    RE
        5
    RE  
       2017-02-17 03:09:30 +08:00 via iPhone
    @moyaka 外行人想请教一下 geo 和 gps 的关系, geo 是否就是常说的经纬度坐标?
    PythonAnswer
        6
    PythonAnswer  
       2017-02-17 03:45:10 +08:00
    先要搞定投影的问题.
    nonesuccess
        7
    nonesuccess  
    OP
       2017-02-17 09:25:36 +08:00
    @Ricepig

    @moyaka

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

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

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

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

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

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

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

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

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

    3.如果底图不需要太新的话个人推荐天地图,因为天地图的投影坐标是 CGCS-2000 和 WGS-84 只有极小的参数差别,误差基本可以忽略。缺点是地图数据更新太慢,配色巨丑。
    moyaka
        19
    moyaka  
       2017-02-17 12:02:22 +08:00
    @kengle
    如果只需要显示底图和打点的话其实并不需要 GeoWebCache 倒是用什么投影坐标比较关键,瓦片图按级别放文件夹里,按解析规则用 leaflet 就可以加载。
    微信加不上,给你邮箱吧:cmVnaXMxODk0QHNpbmEuY29t 。
    moyaka
        20
    moyaka  
       2017-02-17 12:09:27 +08:00
    @murmur
    你让我想起了大学通宵画地图的恐惧。确实如果需求简单用百度或者高德的 api 就可以了,但是像他这样要把多边形 shp 叠到底图上如果还用百度或者高德的 api ,坑就太多了。
    要用这种公开的底图我还是安利天地图,虽然很丑但是坐标几乎和 WGS-84 一样可以直接用,投影坐标的问题解决了其它坑都不算什么。
    nonesuccess
        21
    nonesuccess  
    OP
       2017-02-17 13:18:47 +08:00 via Android
    @kengle 我们的需求基本一致,加个 qq 聊聊?
    nonesuccess
        22
    nonesuccess  
    OP
       2017-02-17 13:19:48 +08:00 via Android
    @moyaka 如果用非公开的地图,技术路线应该是怎样的?虽然我们不是土豪,但现在有点有钱没处花的感觉
    nonesuccess
        23
    nonesuccess  
    OP
       2017-02-17 13:22:11 +08:00 via Android
    @moyaka 对了,转换格式不一定要开源,但几十万的授权估计买不起
    beginor
        24
    beginor  
       2017-02-17 13:50:04 +08:00 via Android
    还是 arcgis 吧,客户端 arcgis api for js ,桌面端 arc map ,服务端 arcgis server
    murmur
        25
    murmur  
       2017-02-17 13:52:39 +08:00
    @nonesuccess 那没钱就不要强上全自己搞定的 GIS 应用,各家互联网公司哪家都不差钱,谁也没自己定制地图不是么
    rssf
        26
    rssf  
       2017-02-17 13:58:44 +08:00 via iPhone
    定制地图,你需要招几个测绘专业的同学
    moyaka
        27
    moyaka  
       2017-02-17 14:21:40 +08:00 via Android
    @nonesuccess
    1.①非公开底图来源:很有钱—当地测绘局买(可能需要推荐信什么的),一般有钱—淘宝关键字"全国 shp"。
    ②制图→发布地图服务→空间数据管理:很有钱— ArcGIS 全家桶(Desktop→Server→SDE),开源— QGIS→MapServer/GeoServer→PostgreSQL
    ③前端展示:和钱无关: ArcGIS js api , leaflet , openlayer 都可以。

    2.非开源的话可以买 FME desktop 专门转数据,个人使用来看开源的已经够用了。
    murmur
        28
    murmur  
       2017-02-17 14:25:20 +08:00
    @moyaka 有点兴趣,问一下,搜了一下点开一家写着 50,100 为单位,如果全国数据岂不是得几千块了?
    RE
        29
    RE  
       2017-02-17 14:34:03 +08:00
    @moyaka #8

    呃,可能我没描述清楚,我是想问,平时用手机拍的照片, EXIF 中带有的坐标信息,例如 “ N 113°12'39.6"” 这样的坐标,应该叫 GEO 坐标,还是叫 GPS 坐标呢?

    或者像百度的 http://api.map.baidu.com/lbsapi/getpoint/index.html 这个页面,拾取到的坐标,是属于 GEO 还是 GPS 呢?

    对这个不太了解,想规范一下自己写的代码中用到的单词,再次感谢!
    pixstone
        30
    pixstone  
       2017-02-17 14:45:34 +08:00   ❤️ 1
    @RE GEO 坐标是通称,旗下包块 WGS-84 、 CGCS2000 、北京 54 、西安 80 。等等一坨一坨的各个坐标系统。

    GPS 系统使用的坐标是 WGS 84 的坐标。
    手机拍的一般可以理解为 GPS 坐标,你要说 GEO 坐标也行。
    RE
        31
    RE  
       2017-02-17 14:59:42 +08:00
    @pixstone 原来是这样~
    moyaka
        32
    moyaka  
       2017-02-17 15:04:58 +08:00 via Android
    @murmur
    2015 年全国我买的价格是 2W
    moyaka
        33
    moyaka  
       2017-02-17 15:08:25 +08:00 via Android   ❤️ 1
    @RE
    百度那个界面拾取出来的是百度坐标,可以说是 GEO 。
    kengle
        34
    kengle  
       2017-02-17 15:51:11 +08:00
    @nonesuccess QQ 号 JXU0RThDJXU1MTZCJXU0RTk0JXU0RTAzJXU1NkRCJXU1MTZEJXU1NkRCJXU1MTZC
    nonesuccess
        35
    nonesuccess  
    OP
       2017-02-17 22:14:32 +08:00
    @moyaka 在淘宝上找到了 shp 资源,以这个为基础,然后把我们需要的小区,用 cad 转成 shp ,再叠加在一起,这个方案靠谱不?

    还有就是看到淘宝上买的 shp 图,配色什么的都不是很好看,想知道这个配色是由什么决定的,是存在 shp 文件中吗?如果我想调的话,是不是就只能相当于重画?
    moyaka
        36
    moyaka  
       2017-02-17 22:35:00 +08:00
    @nonesuccess
    1.可以叠加,注意投影坐标要一致。
    2. 改配色方案需要 GIS 软件里操作 ArcGIS for Desktop 、 SuperMap 、 QGIS 等都可以,如果想在前端或者客户端重绘也可以。
    nonesuccess
        37
    nonesuccess  
    OP
       2017-02-21 09:55:00 +08:00
    @kengle 为什么 qq 号显示的是一堆乱码?
    kengle
        38
    kengle  
       2017-02-21 12:51:49 +08:00 via iPhone
    @nonesuccess 你 base64 解码一下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2209 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:13 · PVG 00:13 · LAX 08:13 · JFK 11:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.