首先我们首先定义什么叫做自己的地图。
我认为就是从数据到发布都可以自己控制或者说是可以发布到内网。只是有几点是可控的。
一、数据属于自己的
二、数据可以自己编辑
三、地图可以自己发布
四、从整体流程到发布都可以自己把控。
那么我从整体开发流程尽量简化一个文档。有不完善的地方清大家指教。
一、数据
从数据来说,对于一张地图来说最重要的就是数据。目前国内的数据采集都比较麻烦甚至涉密。
政府部门和官方机构:中国的交通运输部门、地方政府或城市规划部门可能会提供公开的路网数据。您可以通过官方网站、数据开放平台或相关部门的数据发布渠道来获取这些数据。
开放数据平台:一些开放数据平台可能会提供免费的中国路网数据,例如国家数据共享服务平台、城市数据开放平台等。您可以在这些平台上搜索并下载所需的路网数据。
第三方地图服务提供商:一些第三方地图服务提供商(如百度地图、高德地图)可能提供有关中国路网的数据API,可以通过这些API获取路网数据。您可能需要了解其使用条款和许可要求。
我们讲点现实的,其实中国大部分城市数据只有两个渠道。因为遇见的大部分政府手里的数据质量不高,其次很难获取并且不同城市的数据格式可能完全不同。
一、是图商 但是必须得有项目的合规性的证明 在一个需要几十W左右 成本比较高
二、开发数据平台 基本比较全的就是openstreetmap(osm)的。
这里我介绍一个下载osm数据的方案 。就是从科力地图的官网下载 。
菠萝头:OpenStreetMap(OSM)数据下载0 赞同 · 0 评论文章
省份/城市/县城 级别的数据最佳的下载方案。本质上是基于overpass网站进行下载。但是这个网站要进行一些代码的拼接很麻烦。所以为了方面用户下载,科力地图优化了整个下载流程。不需要进行一些代码的拼接。
科力地图有个数据下载页面。
通过这个搜索栏 可以进行城市名称的搜索。
在这里点击下载就好了。这里进行点击下载就可以进行省份/城市级别数据的下载了。因为这个数据下载源头是overpass网站。估计是动态切分的原理。所以下载速度不会很快。但是对于一些小城市或者县城来说是最佳选择。 因为大部分数据下载网站不会切分的特别细。所以导致一些县城的数据都得自己基于别的工具手动进行切分。
二、空间数据库
数据肯定是需要落地的。常见的关系型数据库大概就是3种 Mysql、oracle、postgres 。GIS行业内
最常用的反倒是oracle和postgres 。为啥不用Mysql呢? 肯定是因为mysql 对空间字段和空间算法支持的不够好了?
大数据部分的数据库也有部分 ,类似hbase,mongdb等 也会有部分空间函数。但是对大部分用户来说没有那么多数据量。
这里主要讲一下postgres和Postgis 。postgis是postgres数据库的一个插件。postgres数据库最大的优势也是可以加载各种插件来扩充自己的能力。PostGIS通过向PostgreSQL添加对空间数据类型、空间索引和空间函数的支持,将PostgreSQL数据库管理系统转换为空间数据库。
PostGIS是一个用于存储和处理地理空间数据的空间数据库扩展,而Oracle Spatial和SQL Server(2008及更高版本)也提供了类似的功能。将普通数据库转变为空间数据库意味着扩展数据库的功能,使其能够有效地存储、查询和分析地理空间数据。
在空间数据库中,引入了特定的数据类型、索引和函数,以支持空间对象的存储和操作。这些要素的作用如下:
数据类型:空间数据库引入了专门的数据类型,如点(point)、线(line)和面(polygon),用于表示地理空间对象。这些数据类型允许存储和处理地理坐标信息,并提供了相应的操作和计算功能。
索引:空间数据库使用多维度空间索引,以提高对空间数据的查询性能。这些索引结构可以有效地处理空间关系查询,如邻近搜索、范围查询和交叉查询,以快速定位和检索空间对象。
函数:空间数据库提供了一系列内置的空间函数,可以执行各种空间操作和分析。这些函数允许进行空间属性查询(如计算面积、长度),以及空间关系查询(如判断两个对象的相交性、包含关系等),从而支持复杂的空间分析和查询需求。
通过结合这些要素,空间数据库能够有效地存储和处理地理空间数据,使其具备空间查询和分析的能力。这为地理信息系统(GIS)、位置分析和地理空间应用提供了强大的数据管理和处理功能
有了空间数据库之后,就不再需要专门的GIS数据引擎(GIS Data Engine)去处理和操纵空间数据了,应用程序只需要通过SQL语言就能轻松地操纵空间数据。
三、操作空间数据
空间数据的特质就是这类数据可以理解为形状,也就是人类很难直接操作数据。因为人类很难通过经纬度还原成图形。我举例一下
wkt格式
LINESTRING (116.397128 39.916527, 116.397800 39.916835, 116.398457 39.917180, 116.399123 39.917542)
geojson格式
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "LineString",
"coordinates": [
[116.397128, 39.916527],
[116.397800, 39.916835],
[116.398457, 39.917180],
[116.399123, 39.917542]
]
}
}
所以操作空间数据必须得使用工具。
这里介绍几种工具
空间数据库工具 pgadmin4 和navicat
推荐操作空间数据使用pgadmin4 这个是专门为postgres数据库准备的数据库操作工具。并且可以对查询结果进行地图的查看 上面的是示意图也是通过这个工具出来的。提示一下设置坐标系为4326.
Navicat 就不做多介绍了 这个工具最大的优势可以链接多种数据库比如mysql、oracle、postgres
桌面gis工具 arcgis、qigs、supermap、josm
最常见的就是arcgis这是毋庸置疑的第一。这个软件也是大学里必须得学的软件。但是这个软件是收费的,但是中国嘛。这类软件一定有中国特质版本 大家自己百度吧。
qgis和supermap的桌面端 也是都可以用的 。 qgis是开源版本的桌面端的软件,比较轻量级但是也十分好用。
supermap也就是超图 是中国版本可以对标arcgis的版本。但是也是收费的哦!!!
josm 就比较特殊了。这个是专门为osm数据准备的编辑工具。
网页端gis工具 超图网站 和osm官网 但是osm官网可能不好打开。
SuperMap Online-全面的在线GIS数据与应用平台www.supermapol.com/
osm官网虽然可以在线编辑,但是都是基于所有共享的数据。也就是你编辑的数据所有osm数据的使用者都可以共享。如果你对数据私密性要求的很高。千万别用osm官网编辑数据。并且我个人不太了解你实时编辑的数据是否下载的时候马上能用。是否有审核的流程和时间。
osm官网(openstreetmap)www.openstreetmap.org/#map=6/18.573/118.323
还有一个专门目前做交通为主的在线地图编辑网站。科力地图
科力地图的核心是可以将地图数据进行在线下载并且导入平台。
1.科力地图拥有多人编辑的能力,桌面端的应用没有办法应对大型对周期要求比较紧的项目。
2.科力地图提供了一套交通路网架构,可以直接让您从数据修改到项目部署一条龙支持。
3.科力地图提供了一套渲染架构,您直接可以从这个网站下载数据直接进行geoserver的渲染。
4.科力地图提供了多源数据绑定:
比如您从图商那拿到了数据,但是数据质量不高想修改部分数据但是图商没办法定制化修改。
比如你从各种厂商拿到不同的数据(路况、设备等),但是最后的项目想多源数据融合或者关联的办法。
总之关于路网的绝大部份解决方案我们都可以提供!!! 欢迎您找我们交流!!!
我们的未来也在高精地图 数字孪生等方向!! 您有定制化需求也可以找我们交流。
四、加载使用空间数据
如何加载或者使用数据呢?如果你想在你的网页里面使用地图或者说是空间数据。那么首先得有一个地图框架,国内大家比较熟悉的是高德和百度。
其实使用范围更大的前端地图框架有两种 openlayers 和leaflet。前端可以通过这两个框架来进行图层的加载。
Leaflet是一个轻量级的开源JavaScript库,专注于提供简单、灵活和易于上手的地图功能。它具有良好的文档和活跃的社区支持,适用于各种规模的项目。Leaflet支持多种地图图层、标记、矢量图形、交互操作等功能。它还提供了丰富的地图样式和插件,可以轻松扩展和定制地图应用。
OpenLayers是另一个功能强大的开源地图框架,提供了广泛的地图功能和高度可定制化的选项。OpenLayers支持多种地图投影、图层类型和数据源,包括瓦片地图、矢量数据、WMS/WMTS服务等。它具有强大的地图渲染和交互能力,支持地图缩放、平移、标记、查询、绘制等操作。OpenLayers还提供了丰富的API和模块化的架构,使开发者能够构建复杂的地图应用。
Leaflet和OpenLayers在使用方式和理念上有一些区别。Leaflet注重简洁和易用性,适合快速搭建基本的地图应用。OpenLayers则更加全面和功能丰富,适合需要更高级功能和复杂场景的项目。选择使用哪个框架取决于项目需求、开发经验和个人偏好。
其实从地图框架来说数据来自于两个部分,
一、地图底图
二、空间数据格式加载(geojson、wkt)类似的空间格式。
第一个大部分数据是必须得通过地图图层加载的。第一个是减少客户端的数据处理,因为大部分图层对于地图框架来说都是图片的加载。
第二个就是空间数据的加载,也就是可以进行用户交互的部分。使开发者能够构建复杂的地图应用。
这个部分也就是用户如何构建自己的地图应用的部分。可以根据自己的应用的进行不同逻辑的开发。下图就是我们开发的一个地图平台。
如何发布自己的地图图层呢 。 这个部分我在之后的文章给大家讲述。