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

继续请教开发漂亮的 GIS 程序的方法

  •  
  •   nonesuccess · 2017-05-13 22:38:52 +08:00 · 3998 次点击
    这是一个创建于 2754 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前在: https://www.v2ex.com/t/341025 中扫了扫盲,研究了许久后,下面几个方案都搞通了:

    • 用百度或者高德 map api
    • 爬来百度或高德或谷歌的瓦片图扔到服务器上再用 openlayers 的 xyz 方法显示
    • 淘宝上买 shp 格式地图资源,用 geoserver+openlayers 显示

    在线 api 是最方便的,但存在以下问题:

    • 有场景是针对某个建筑物进行管理,需要放大缩小至该建筑物占满屏幕大部分,在线 api 的放缩级别不够
    • 同上一条,在线 api 的楼宇细节不够(我们的目标地点是某八线县城,百度或高德上的建筑信息都很不全)
    • 在线 api 提供的定制型不够,比如想细致的调整配色,或者显示一条闪烁的箭头之类的,都没找到相应的方法
    • 领导的意思是要把地图做成系统的亮点,因此要漂亮、细致。参考 E 都市,风格不要 3d 的,但是漂亮程度要接近。

    所以后面想研究的方向是自建地图,有下面几个想法:

    爬百度或者高德的地图资源,用 openlayers 显示,再叠加网上购买的 shp

    存在的问题是,两个地图的坐标叠不上,差十几米的样子。想请教大家,能否解决,解决的话,应该 1、调整瓦片图 2、QGIS 或人肉改 shp 3、在 openlayers 中通过某个方法调整两个图层的坐标差?

    前两种方法都感觉太笨了,理论上第三种最靠谱,但翻了翻 openlayers 的文档,愣是没找到。

    自己画地图

    网上买 shp 即便是能叠加上,但还是比较难看,所以在考虑是否自己画地图的方案更靠谱。

    我们要管理的范围,第一批大概不超过 100 平方公里,居民区不超过 100 个,我们手里有所有建筑的 cad 图。

    如果我去找那种做小区平面设计图的人,把 cad 图给他们,让他们按照我们要求的风格画出图,然后写个程序切出瓦片图(对一个端点或两个端点的坐标就能保证矩形的所有点坐标都是对的?)。之后架一个 GIS 数据库,人肉把每个建筑物的坐标点量出来,存到数据库里(按照 100 个小区,每个小区 100 个建筑物算,大概是个 100~200 人天的体力活),这样建筑物的信息也都有了,鼠标指向后的高亮效果也实现了,基本上满足了我们的所有要求。

    之后的需求,无非是根据 GPS 坐标在图上标记一些点位,如果地图都是我们自己画的话,和 GPS 坐标的偏移问题应该也能很简单的解决吧。

    这个方案靠谱吗?

    如果不完全靠谱的话,是否可以通过底图+shp+重点区域用以上方法绘制的结合方法?如果可以的话,要解决 1、坐标偏移问题、2、底图用谁的 3、shp 是否能简单的编辑,比如人肉画一片区域出来

    写得有点乱,主要是对 GIS 还没有系统性了解,都是查到的各种野路子凑上去。

    11 条回复    2017-06-22 20:34:36 +08:00
    lyog
        1
    lyog  
       2017-05-13 22:45:30 +08:00 via Android
    你可以百度一下 arcgis 空间校正,看看是不是你想要的功能
    lyog
        2
    lyog  
       2017-05-13 22:47:17 +08:00 via Android
    or arcgis 地理配准
    nonesuccess
        3
    nonesuccess  
    OP
       2017-05-14 08:16:11 +08:00 via Android
    @lyog 研究一下看看
    gooin
        4
    gooin  
       2017-05-14 09:34:28 +08:00 via Android
    地图坐标重叠不上应该是投影问题。如果投影一致的话用 ArcGIS 校准一下就行,不过手动校准或多或少都有点小小的误差。
    参观过某大数据局,他们是在网页端 2.5D 展示整个城市,点击每个建筑会显示建筑内住户信息什么的。我问了他们是怎么做的,他们说楼下一层人都是干这个的,三维建模,地图绘制之类的。供楼主参考
    nonesuccess
        5
    nonesuccess  
    OP
       2017-05-14 09:38:38 +08:00
    @gooin @lyog

    如果要用 arcgis,要买授权吗,还是说有试用版的可以用?我们初期就调整这一点的东西就行了
    lyog
        6
    lyog  
       2017-05-14 09:52:03 +08:00 via Android
    @nonesuccess arcgis 是付费软件,而且炒鸡炒鸡贵,有个被 arcgis 甩 n 条街国产软件 supermap,前三个月试用。对付这个简单的功能还绰绰有余。
    gooin
        7
    gooin  
       2017-05-14 10:01:17 +08:00
    ![2.5dcity.png]( https://ooo.0o0.ooo/2017/05/14/5917ba3de681e.png)
    不知道楼主是不是需要这样的东西
    nonesuccess
        8
    nonesuccess  
    OP
       2017-05-14 10:22:33 +08:00
    @gooin 差不多,但是我们不需要这个透视效果,视角在正上方看平面图就行
    phobal
        9
    phobal  
       2017-05-14 22:50:18 +08:00
    1、如果没理解错的话你目前最大的问题就是怎么将你从百度或高德抓的瓦片数据和你在淘宝买的 shp 数据进行小偏差的叠加,首先你要弄清楚你买的 shp 数据的坐标系是什么(这个可以将 shp 文件导入到 ArcGIS 等软件中查看属性查询到),然后明白高德或者百度瓦片数据的坐标系,然后可以通过 ArcGIS 将其转正相同的坐标,这样就能在地图中正常显示了。
    2、如果你不用你买 shp 的话,直接画 CAD 同样可以在 ArcGIS 中将其导出成 shp 格式,然后可以使用 ArcGIS 全家桶中的 ArcGIS Server 将 shp 发布成地图服务,然后使用 ArcGIS for JS API 去调用服务,这样做的话你说的需求基本都全能实现,只是这种方案学习成本比较高。
    如果还不懂的话可以发邮件问我 [email protected]
    swim2sun
        10
    swim2sun  
       2017-05-15 10:08:23 +08:00
    百度或者高德的坐标系不是国际标准的,是经过加密的,在 openlayer 上应该是没有对应的坐标系的,所以你怎么调都是会有问题的。你可以使用开源的 openstreemap。另外如果想做漂亮的地图,也可以了解下 mapbox。
    taozhi8833998
        11
    taozhi8833998  
       2017-06-22 20:34:36 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3651 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 00:49 · PVG 08:49 · LAX 16:49 · JFK 19:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.