V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
nonesuccess
V2EX  ›  程序员

熟练 Java 开发,项目中需要 GIS 功能,请教大家应该怎样学习

  •  
  •   nonesuccess · 2016-06-11 23:11:37 +08:00 · 8333 次点击
    这是一个创建于 3116 天前的主题,其中的信息可能已经有所发展或是发生改变。

    做一个学校或者厂区或者社区的业务系统,需要 GIS 功能,显示地图,在地图上标点位,做回调事件。

    类似于百度地图提供的 api 就符合要求,但单位内部的地图资源肯定在百度上采集不到。另外就是,地图的样式需要分为平面和立体两种,平面的就类似于百度地图,立体的可能类似于: http://sh.edushi.com/。

    现在不知道从哪里下手。从 GIS 理论开始学起的话,成本肯定过高了,再者也用不到这么高深的理论知识。感觉上,应该有下面几方面的问题要解决:

    • 地图资源从哪来。可以接受资金投入,猜测有几种方式,一种是去某些有资质的公司买,一种是请有资质的公司画,一种是自己画。前两种的话,一般哪种公司做这个事,后一种的话,有没有可行性,需要学习什么技能
    • 是否有一个叫做 GIS 引擎的东西,可以接受符合它格式要求的地图资源,然后提供地图资源管理、数据库管理、界面显示功能,从而让我拿到地图导进去之后,就能有一套类似于百度地图的程序,并且我可以做二次开发。如果有的话求关键字,如果做不到这一点,那流行的工具能做到哪一步。比方说如果需要我自己开发前端显示,读取瓦片图然后自己拼,放大缩小,那工作量就比较大了。
    • 在上面两条的基础上,想做开发的话,需要学习什么样的东西,或者说招聘的话,需要招什么类型的和水平的人员。一般的 Java 开发工程师,专心去研究 GIS 的东西能不能做到支撑日常开发

    现有技术都是基于 Java 的,后面的技术方案最好也是 Java 这一套。以 Java GIS 为关键字搜了一些材料,但感觉不太得法,也不知道这条路可行不可行。

    请教大家应该走一个什么样的路线才能解决这个问题

    26 条回复    2016-06-12 15:26:11 +08:00
    carlhan
        1
    carlhan  
       2016-06-11 23:59:02 +08:00 via Android
    关于第二点 可以看看 Mapbox https://www.mapbox.com 和 Leaflet

    不过都是 JS 的 主要用于 web

    逃…
    qvvo
        2
    qvvo  
       2016-06-12 01:48:33 +08:00   ❤️ 1
    招个学 java 的从头学 GIS 不如招个学 GIS 的,
    这个地理信息系统本身就是个本科专业,
    地图引擎厂商有美国的 ESRI ,产品主要是 ArcGIS 系列,
    国产的主要就是 SuperMap 了,我不太了解 SuperMap 的产品
    地图资源可以用 ArcGIS 的桌面软件 ArcMap 来自己绘制了,格式一般是 shp
    开源的找找 OSGeo 的软件包,也能做地图编辑发布切图一条龙,大概有 Grass, QuantumGIS , MapServer 等等
    但难度估计比较大,我是没玩转。


    推荐用加载瓦片的方式来做,
    把自定义地图切成瓦片放到本地或服务器。
    加载地图,分层显示加个点之类的,
    用 openlayers 或者其他的 js 库也能搞定了应该。

    有个比较牛叉的国人做的开源工具 geopbs
    可以参考下:

    https://geopbs.codeplex.com/
    julor
        3
    julor  
       2016-06-12 07:42:57 +08:00 via Android   ❤️ 1
    开源的一套完全满足你的需求。
    数据库用 postges+postgis
    服务端用 geoserver 或者 mapserver
    数据处理用 qgis
    web 端用 openlayers3 或者 leaflet
    murmur
        4
    murmur  
       2016-06-12 07:56:51 +08:00
    跟你说 你做应用 gis 那部份完全没压力 最大的问题在处理图纸上 怎么把图纸做的漂亮还清晰
    openlayers 的难度不会比 jquery 高多少 但是处理瓦片做瓦片服务器那块才是难点
    techme
        5
    techme  
       2016-06-12 09:19:49 +08:00   ❤️ 1
    github.com/Project-OSRM 这个好像可以
    cdxem713
        6
    cdxem713  
       2016-06-12 09:21:27 +08:00
    不知道你是要做内网还是外网的,内网的话没地图资源估计自己搞不定,外网直接用高德或者百度的 JS 开发包做二次开发就好了。
    技术上 JAVA 能做的主要都是后端接口开发,如果你不考虑自己做地图渲染,那后端估计没啥可做的,有的只有地标点的存储和同步吧,前端还是得靠 JS 。
    cdxem713
        7
    cdxem713  
       2016-06-12 09:22:22 +08:00
    如果没有很复杂的定制需求的话,没有必要用 leaflet 或者 openlayer 这些库
    Neveroldmilk
        8
    Neveroldmilk  
       2016-06-12 09:26:55 +08:00
    免费开源的 C/S 开发套件是 Geotools+PostGIS 。
    nonesuccess
        9
    nonesuccess  
    OP
       2016-06-12 09:31:00 +08:00
    @murmur 这块的难点是在开发上,还是在画图上?应该往哪个方向去努力解决呢?
    swim2sun
        10
    swim2sun  
       2016-06-12 09:41:44 +08:00
    根据楼主的需求, geoserver + openlayers 就可以搞定了。
    首先,地图资源可以使用 QGIS 画,也可以请专门的数据公司画。平面还比较好搞,立体的可以使用 2.5D 的,需要先用 3DSMAX 作出立体图,再投影成 2.5D 。
    数据可以导入到 geoserver ,前端 openlayers 访问 geoserver 服务器展示数据。

    这是开源的解决方案,也可以用 ArcGIS 系列
    swim2sun
        11
    swim2sun  
       2016-06-12 09:43:26 +08:00
    @nonesuccess GIS 大概 80%的时间得花在数据上
    Neveroldmilk
        12
    Neveroldmilk  
       2016-06-12 09:52:48 +08:00
    说 ArcGIS 解决方案的,最好了解一下 Esri 的报价,基本上都吓跑了。
    murmur
        13
    murmur  
       2016-06-12 09:58:37 +08:00
    @nonesuccess 当然是制作地图的 如果是小区域而且是自己标点可以用直角坐标系代替真实的世界坐标 误差也不会很大 如果是真实采集的数据这一部分没地理相关知识真搞不定
    nonesuccess
        14
    nonesuccess  
    OP
       2016-06-12 10:32:21 +08:00
    @murmur 意思就是说,我把前后端的技术方案都搭建好了,然后给个任务说把北京昌平区的地图画出来,这事就必须的 GIS 专业的人才能搞?
    Neveroldmilk
        15
    Neveroldmilk  
       2016-06-12 10:32:23 +08:00
    不可能绕过坐标转换的,否则你以后所有的坐标修改和标注都要自己写代码转换,并且你的坐标系和世界坐标系也对不上。
    nonesuccess
        16
    nonesuccess  
    OP
       2016-06-12 10:34:03 +08:00
    @julor @swim2sun 我理解 geoserver 是提供瓦片图管理和访问的 api 的,那所谓的 GIS 数据库又是做什么的呢?
    nonesuccess
        17
    nonesuccess  
    OP
       2016-06-12 10:36:23 +08:00
    @Neveroldmilk 那如果我给一个厂区,或者方圆几平方公里的居民区建模,就不需要跟真实世界的坐标系对应了吧?

    就是说我自己建立一个直角坐标系,所有的坐标修改和标注都用我这套坐标系,也就不存在写代码转换的问题了?
    murmur
        18
    murmur  
       2016-06-12 10:37:35 +08:00
    @nonesuccess 我认为是,而且坐标系也最好用真实坐标,这样你去踩点也容易点,以后如果接入更多信息也是标准
    做地图绝对不是一个前端或者后端就能做出来的,要好看,美观,实用,可扩展,要不为啥国内地图那么多提供地图的就几家
    nonesuccess
        19
    nonesuccess  
    OP
       2016-06-12 10:45:25 +08:00
    @murmur 对,我其实也是想问,按说我们的主业就是做业务系统的,那想加 GIS 模块的话,是自己研究明白了更好点,还是直接去买个方案更好点
    murmur
        20
    murmur  
       2016-06-12 10:52:05 +08:00
    @nonesuccess 拿到图纸 GIS 模块的开发都不是难点,无外乎是连接瓦片服务器,用一些前端代码在地图上描点罢了
    yszx
        21
    yszx  
       2016-06-12 11:07:40 +08:00
    去问 e 都市要定制吧···
    babygame18
        22
    babygame18  
       2016-06-12 14:02:26 +08:00   ❤️ 1
    我前阵子开源的地图引擎,支持多数据图源,欢迎使用!!!
    https://github.com/X-Maper/jMaper
    nonesuccess
        23
    nonesuccess  
    OP
       2016-06-12 15:01:15 +08:00
    @murmur 图纸是什么?是厂区的 CAD 图之类的东西吗?

    做地图绝对不是一个前端或者后端就能做出来的,要好看,美观,实用,可扩展,要不为啥国内地图那么多提供地图的就几家

    还是不太理解,你的意思是难点在画地图还是用地图上。比如我找地图提供商去买的话,买来的是瓦片图吗,是不是买回来之后我导入到 geoserver 中,再用 openlayers 展现一下就可以了?

    好看美观说的是地图本身的好看美观,还是网页上那个地图控件的好看美观?实用可扩展应该跟地图没关,完全是引擎的事吧,我用上面说的那些开源工具简单定制一下能做到吗?如果做不到的话,有没有成熟的方案可以买呢?
    murmur
        24
    murmur  
       2016-06-12 15:04:18 +08:00
    @nonesuccess 瓦片图是有缩放级别的 不同的级别显示的精细度 内容都可能不一样 不是简单的图片缩放 至于做几级要看你们需求了
    asdwfwqd
        25
    asdwfwqd  
       2016-06-12 15:07:02 +08:00
    外包
    nonesuccess
        26
    nonesuccess  
    OP
       2016-06-12 15:26:11 +08:00
    @asdwfwqd 哪家公司比较靠谱?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3130 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 62ms · UTC 12:57 · PVG 20:57 · LAX 04:57 · JFK 07:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.