6.2. 什么是Web 制图API?¶
API(应用程序编程接口)是可用于编写程序的框架。它提供了一组类和函数,可帮助您避免编写所有低级代码来执行特定操作。例如,Web Mapping API通常包括用于地图和图层的类,因此您不必编写用于显示交互式地图图像并在其上绘制新图层的所有低级代码。相反,您可以只创建一个新的地图对象,创建一个新的图层对象,然后调用诸如layer.addTo(map)之类的方法。该API提取了任务的复杂性,使您可以轻松地将精力集中在应用程序的制图方面,而不必花时间在底层物流上。
您可能听说过通用的API,例如Java和Microsoft .NET Framework,可用于在台式机,Web和移动平台上编写各种程序。还有围绕某些产品和功能构建的更专业的API。例如,您可能听说过专为专有云计算环境设计的Google App Engine,Amazon Web Services和Microsoft Windows Azure。
专门为制作web地图而设计的API包括OpenLayers、Leaflet、Google Maps API和用于JavaScript的ArcGIS API。后两者更为具体,因为它们是围绕特定的专有平台设计的。本课程将介绍一些不同的API和应用程序开发方法,然后详细介绍如何使用LeafletAPI。
请注意,API不是编程语言。相反,它是您使用一种语言调用的一组构建块。一些API支持与多种编程语言一起使用,而其他API则与一种特定的语言绑定在一起。例如,既有一种语言,又有一种名为Java的API。Java语言用于Java API(和其他API)。相比之下,.NET Framework仅仅是一个API。没有称为.NET的语言。使用.NET Framework的应用程序通常使用C#或Visual Basic语言进行编程。
6.2.1. 选择Web 制图API¶
当您开始创建一个web地图时,您将做出的最重要的选择之一是使用哪个API。如果你的应用程序涉及到很多客户,那么这个决定会影响你多年的职业活动和发展轨迹。如何选择最适合您的需求和技能集的API?
API的选择通常与平台和编程语言的决定紧密相关。这两个因素会影响您可以使用的API。例如,如果您知道需要在Android平板电脑上运行您的应用程序,则首先需要确定是否要构建功能完善的本机应用程序(换句话说,该应用程序可在Google Play中使用并可以访问 设备硬件(例如相机)或仅在Android平板电脑上的网络浏览器中运行的设备。开发本机应用程序很可能意味着您将使用Java,而开发基于浏览器的应用程序则可以提供更大的灵活性,并且可以使用JavaScript和HTML来完成,也许使用设计为移动友好的API(换句话说, 它支持触摸手势,调整大小到设备宽度等等)。
从这个例子中,您可能还可以说,考虑开发人员熟悉的语言和平台很重要。如果您的员工了解Java或Objective C,那么您开发本地移动应用程序的选择就会增加。但是,HTML和JavaScript的知识通常足以构建基于浏览器的应用程序。大多数用于Web 制图的FOSS API都针对HTML和JavaScript方法,因此这是我们在Geog 585中将重点关注的内容。
6.2.2. FOSS Web 制图API示例¶
以下是FOSS Web 制图API的一些示例,这些示例可使用HTML和JavaScript构建基于浏览器的应用程序。
6.2.2.1. OpenLayers¶
`OpenLayers <https://openlayers.org/>`_是用于构建Web地图应用程序的成熟且功能丰富的JavaScript API。尽管有些材料对于初学者来说很难理解,但它具有大量的文档和样本集合。关于OpenLayers的最好的事情之一就是使用该API的大型开发人员社区。这个社区在诸如`GIS Stack Exchange <https://gis.stackexchange.com/questions/tagged/openlayers> __之类的论坛上创建了大量技巧和示例。尽管OpenLayers对于初学者而言不像其他一些API那样容易使用,但它的在线帮助资源的积累以及对FOSS和商业来源的许多层类型的支持都比其他API更具优势。2014年,OpenLayers 3发布,这是重要的一步,因为它是对库的完全重写,不再与OpenLayers 2分支兼容。相比之下,当前版本的OpenLayers 5仍然向后兼容OpenLayers 3的先前版本。如果您在本节课后对JavaScript和Leaflet感到满意,并决定在最终项目中使用OpenLayers,欢迎您继续进行,牢记其优势和劣势。
6.2.2.2. Leaflet¶
`Leaflet <https://leafletjs.com/> __是一种较年轻的FOSS Web 制图API,旨在轻巧,适合移动设备且易于入门。在过去的几年中,它变得非常流行(这是我们现在在本课程中进行讲授的一个原因),并且许多公司(例如Mapbox)都将其用作自己的API的基础。Leaflet重点强调使用从GeoJSON等来源绘制的瓦片地图和客户端矢量图形(您将在下一课中详细了解后者)。对于使用这些图层类型的基本地图,Leaflet是一个绝佳的选择,已经吸引了许多GIS开发人员。
Leaflet contains a full API reference but only a handful of full working examples compared to OpenLayers. Going beyond the examples can be tricky for beginners; however, the simplicity of the API lends itself well to learning on the fly.
6.2.2.3. D3¶
D3 是一个FOSS数据可视化库,经常用于绘制图表,但也包含许多地图示例。它将数据元素绑定到页面的文档对象模型(DOM),允许有趣和灵活的数据动画和转换。尽管D3对于新手来说有着更陡峭的学习曲线,但它是一个很好的选择,可以用来编写带有交互式地图和图表的web应用程序。它还提供examples for using non-Mercator projections 。
6.2.2.4. Polymaps¶
Polymaps是简单的FOSS 制图 API,主要用于将具有从 GeoJSON 和其他来源绘制的矢量特征的地图图块混搭。但是,开发人员示例还展示了Polymaps `如何将光栅图像<http://polymaps.org/ex/transform.html> __转换并覆盖到现有的图块集上。`k-means聚类示例<http://polymaps.org/ex/cluster.html>`_展示了Polymaps API的独特功能,可以动态地概括大量点。
6.2.2.5. ModestMaps¶
ModestMaps 是用于显示瓦片地图的轻量级FOSS API。By design, it lacks a lot of the functionality of the other APIs 上面提到过。运行JavaScript代码需要将该代码传输到浏览器。如果你知道你只想显示一个地图,为什么要加载数百个函数?
6.2.2.6. 专有Web 制图 API示例¶
由商业软件公司创建的几个专有Web 制图API已经非常流行。在这种情况下,“专有的”意味着不能下载和/或不允许修改和/或不支付使用费就不能部署API的源代码。
我包含了关于专有选项的这一节,因为您将一直听到它们,许多选项是免费使用的(在各种条件下),其中一些选项将与我们在本课程中使用的层类型一起使用。请注意,专有API可能面向购买特定的产品或服务,如果您为了金钱利益而部署它们,或者如果它们导致大量流量,则可能需要花费金钱。在将任何应用程序部署到自己的开发计算机之外的服务器上之前,请始终检查API的许可协议。
6.2.2.7. Google地图和Bing地图API¶
Google Maps API 使开发人员有机会将自己的数据覆盖在谷歌地图的瓦片地图层之上。覆盖的数据通常通过KML文件提供,并显示为在客户端绘制的交互式矢量图形。开发人员可以重新设计这些图形的样式以使用自定义标记符号,还可以将这些图形绑定到弹出窗口或表格以在单击鼠标时显示其他信息。
也许Google Maps API的最大优势是它将Google Maps的外观和感觉带到了应用程序中。许多互联网用户都有使用谷歌地图的经验,当他们看到谷歌地图导航控件或地图样式时可能会感觉更舒服,即使这是嵌入到一个不熟悉的第三方应用程序中。可以说,Google Maps API并不比上面描述的一些FOSS API更健壮或更易于使用;但是,它有完整的文档记录,并提供了一个大型的开发人员社区。
2018年7月,谷歌地图(Google Maps)采用现收现付模式,所有客户每月可获得200美元的信用额度,并且必须支付超过此额度的服务使用费。根据他们在撰写本文时的定价计划,这将足以覆盖100000个静态地图视图或28500个动态地图视图。见this page 关于谷歌定价和计划的最新信息。
微软的Bing Maps 作为另一家大型商业地图提供商,必应地图为网络和移动应用程序提供了与谷歌范围相似的API。必应地图为企业提供了免费使用层和基于数量的定价(参见详细信息here )。与Google的一个区别是Bing地图API不太重视KML的使用,因为Google普及了KML格式,并且是创建KML文件的主要平台。
Google 和 Bing 地图 API 是place finder应用程序开发人员中的一个流行选择,这些应用程序显示real estate listings , businesses , churches 但是,一些网站开始采用自由/开源软件替代方案。例如Craigslist 在显示房地产搜索结果时采用了 Leaflet +开放式街道地图的方法。
6.2.2.8. ArcGIS应用程序接口¶
Esri已经创建了用于构建web应用程序和本地移动应用程序的API,其中一些API与googlemapsapi和许多FOSS API相比功能相对丰富。那个ArcGIS API for JavaScript 是这些API中功能最全、开发最活跃的一个。
ArcGIS API的主要设计目的是与使用ArcGIS Online <https://www.esri.com/zh-cn/arcgis/products/arcgis-online/overview> _和`发布的Web服务一起使用。ArcGIS Enterprise <https://www.esri.com/zh-cn/arcgis/products/arcgis-enterprise/overview>`_(由ArcGIS Server <https://enterprise.arcgis.com/en/server组成 /latest/get-started/windows/what-is-arcgis-for-server-.htm>`_和`Portal for ArcGIS <https://enterprise.arcgis.com/en/portal/latest/administer/windows /what-is-portal-for-arcgis-.htm>`_)。但是,某些API也可以显示OGC服务,KML和通用瓦片地图服务(例如我们使用TileMill构建的服务)。API的另一个显着优势之一是它们可以利用源自ArcToolbox的Web服务的功能,这些服务在服务器上执行地理处理。在这个领域中,FOSS解决方案缺乏等效的GUI体验(请参阅第8课中有关WPS服务的部分)。
这些API可以免费用于开发或教育用途,但如果您要销售应用程序或在其中嵌入广告,则需要付费。发表于此Esri's terms of use 。
如果您有兴趣学习Google Maps API和/或ArcGIS API for JavaScript,宾夕法尼亚州立大学Geog 863 提供一个很好的开始的地方。
6.2.3. 其他Web 制图API¶
这些年来,出现了许多其他免费和专有的API,它们的功能几乎与上面列出的相同。其中一些,例如0 `Mapbox.js <https://www.mapbox.com/help/define-mapbox-js/>`_和CARTO Maps API <https://carto.com/developers / maps-api />`_,与基于云的地图和位置服务相关联。请绕行阅读此GIS Stack Exchange帖子<https://gis.stackexchange.com/questions/8032/comparing-various-javascript-mapping-libraries?rq=1>`,其中描述了可用的Web 制图API。完成本周的作业后,您将返回该职位。