OpenStreetMap初探(九)——发布自己的 Web Map Service

2023-11-04 23:08

本文主要是介绍OpenStreetMap初探(九)——发布自己的 Web Map Service,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、准备

选择合适的JavaScript API 和切片服务器后,可以很方便地发布自己的地图服务。如果需要定制化的地图切片,可以进一步选择特殊的切片服务器或者制作自己的切片服务器。

选择API/类库

与商业在线地图服务提供商不同,OpenStreetMap没有所谓官方的JavaScript类库。因此,在茫茫工具中,你可以按自己的需求选取。最为流行的两个是 OpenLayers和Leaflet,且都是开源的。


: a mature, feature-rich library

:a new, lighter library
附:1、如果你选择MapQuest Open tiles(通过OSM数据生成),你可以选择使用 MapQuest Open API。
2、 Mapstraction 库可帮你更换地图供应商而不更改原始代码。

选择一个切片服务器

除了少量的测试,你不应该使用OpenStreetMap.org来作为切片服务器,而应该选用第三方服务器、通过OSM数据制作切片、或者建立自己的切片服务器。
附:
1、免费的切片服务器: MapQuest Open

2、付费的切片服务器: see list.

3、建立自己的切片服务器: generate and serve your own tiles.


二、测试

我选择相对轻量级的Leaflet(点击这里下载leaflet.cloudmade.com),下载后解压,在\CloudMade-Leaflet-538dfb4\debug\map 下,有测试例子。打开可以直接运行,但是还没有发布到web上。

尝试发布一个地图服务:

1、将下载后的文件夹,用IIS 建立成虚拟目录并发布(IIS的发布网上有很多资料)。

2、在对应文件夹下找到map文件夹,点击打开。

在右边任意找一个文件,右击-->浏览 ,配置正确的话,在浏览器中应该可以弹出地图来了。


(注:我修改了文件夹名为leaflet和端口号,可不修改)

3、将localhost换成本机的ip地址。至此,在局域网内的其他主机以可以访问这个地图服务。找个公网ip便发布到公网上了。



3、“向榜样学习”

在上面列出的debug下的几个html中,挑了一个显示效果比较好,功能也与我需求相接近的来研究研究。先看看显示效果(代码我稍做了修改)。在打开地图后,地图定位到我设定的初始位置,地图放大级别为15级。在点击“添加位置”按钮后,在地图上随机显示蓝色图标。


map.html源文件如下:

<!DOCTYPE html>
<html>
<head>
<title>Leaflet debug page</title>
<link rel="stylesheet" href="../../dist/leaflet.css" />
<!--[if lte IE 8]><link rel="stylesheet" href="../../dist/leaflet.ie.css" /><![endif]-->
<link rel="stylesheet" href="../css/screen.css" />
<script src="../leaflet-include.js"></script>
</head>
<body>
<div id="map" style="width: 600px; height: 600px; border: 10px solid #ccc"></div>
<button id="populate">添加位置</button>
<script type="text/javascript">
  var cloudmadeUrl = 'http://{s}.tile.cloudmade.com/BC9A493B41014CAABB98F0471D759707/997/256/{z}/{x}/{y}.png',
  //var cloudmadeUrl = 'H:\Kosmos-2.5.405.6\Console\Tiles\{z}\{x}\{y}.png',
cloudmadeAttribution = 'Map data &copy; 2011 OpenStreetMap contributors, Imagery &copy; 2011 CloudMade',
cloudmade = new L.TileLayer(cloudmadeUrl, {maxZoom: 18, attribution: cloudmadeAttribution}),
latlng = new L.LatLng( 36.6729612856341,117.02018675292972);
var map = new L.Map('map', {center: latlng, zoom: 15, layers: [cloudmade]});

var markers = new L.FeatureGroup();
function populate() {
/*
for (var i = 0; i < 10; i++) {
markers.addLayer(new L.Marker(getRandomLatLng(map)));
}
*/
markers.addLayer(new L.Marker(getRandomLatLng(map)));
return false;
}
markers.bindPopup("<p>测试用点...tested by Mr.An </p><p>济南.大明湖.</p>");
map.addLayer(markers);
//populate();
L.DomUtil.get('populate').onclick = populate;

</script>
</body>
</html>

代码分析:

首先在head中加入了.css和对应的.js文件,(对应文件在下载的文件夹中)。

在body中,

<div id="map" style="width: 600px; height: 600px; border: 10px solid #ccc"></div>
<button id="populate">添加位置</button>

定义了界面包含地图区域和一个按钮。在javascript中,

var cloudmadeUrl = 'http://{s}.tile.cloudmade.com/BC9A493B41014CAABB98F0471D759707/997/256/{z}/{x}/{y}.png'

定义了切片服务器。

cloudmadeAttribution = 'Map data &copy; 2011 OpenStreetMap contributors, Imagery &copy; 2011 CloudMade',

定义了地图下面显示的copyright。

然后分布定义了切片、一个点和地图、和marker图标。之后定义了按钮的OnClick动作,并绑定了按钮及markers的单击弹出动作。

代码比较简单,下面总结一下,在网页中嵌入OSM地图的方法。

4、总结

1、引入css与js文件,一般包含:

<link rel="stylesheet" type="text/css" href="leaflet/leaflet.css" />
<script type="text/javascript" src="leaflet/leaflet.js"></script>

2、在自己的网页文件中设置地图显示的位置和相应按钮

3、在javascript中,进行相应设置,主要包括:定义切片服务器、设置copyright、创建map实例(这些工作也可以放在外部js文件来实现)。如需要添加markers或者其他图形,可通过map.addLayer()方法实现。


注:网上关于OSM的资料目前还比较有限。能力所限,错误难免。欢迎各位同仁批评指正,也欢迎大家的交流。转载请注明出处。





参考:

1、http://switch2osm.org/using-tiles/

2、http://switch2osm.org/using-tiles/getting-started-with-leaflet/

这篇关于OpenStreetMap初探(九)——发布自己的 Web Map Service的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/345788

相关文章

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

JSON Web Token在登陆中的使用过程

《JSONWebToken在登陆中的使用过程》:本文主要介绍JSONWebToken在登陆中的使用过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录JWT 介绍微服务架构中的 JWT 使用结合微服务网关的 JWT 验证1. 用户登录,生成 JWT2. 自定义过滤

SpringKafka消息发布之KafkaTemplate与事务支持功能

《SpringKafka消息发布之KafkaTemplate与事务支持功能》通过本文介绍的基本用法、序列化选项、事务支持、错误处理和性能优化技术,开发者可以构建高效可靠的Kafka消息发布系统,事务支... 目录引言一、KafkaTemplate基础二、消息序列化三、事务支持机制四、错误处理与重试五、性能优

一文教你如何将maven项目转成web项目

《一文教你如何将maven项目转成web项目》在软件开发过程中,有时我们需要将一个普通的Maven项目转换为Web项目,以便能够部署到Web容器中运行,本文将详细介绍如何通过简单的步骤完成这一转换过程... 目录准备工作步骤一:修改​​pom.XML​​1.1 添加​​packaging​​标签1.2 添加

新特性抢先看! Ubuntu 25.04 Beta 发布:Linux 6.14 内核

《新特性抢先看!Ubuntu25.04Beta发布:Linux6.14内核》Canonical公司近日发布了Ubuntu25.04Beta版,这一版本被赋予了一个活泼的代号——“Plu... Canonical 昨日(3 月 27 日)放出了 Beta 版 Ubuntu 25.04 系统镜像,代号“Pluc

SpringBoot如何通过Map实现策略模式

《SpringBoot如何通过Map实现策略模式》策略模式是一种行为设计模式,它允许在运行时选择算法的行为,在Spring框架中,我们可以利用@Resource注解和Map集合来优雅地实现策略模式,这... 目录前言底层机制解析Spring的集合类型自动装配@Resource注解的行为实现原理使用直接使用M

C++ 各种map特点对比分析

《C++各种map特点对比分析》文章比较了C++中不同类型的map(如std::map,std::unordered_map,std::multimap,std::unordered_multima... 目录特点比较C++ 示例代码 ​​​​​​代码解释特点比较1. std::map底层实现:基于红黑

MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析

《MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析》本文将详细讲解MyBatis-Plus中的lambdaUpdate用法,并提供丰富的案例来帮助读者更好地理解和应... 目录深入探索MyBATis-Plus中Service接口的lambdaUpdate用法及示例案例背景

Nginx实现前端灰度发布

《Nginx实现前端灰度发布》灰度发布是一种重要的策略,它允许我们在不影响所有用户的情况下,逐步推出新功能或更新,通过灰度发布,我们可以测试新版本的稳定性和性能,下面就来介绍一下前端灰度发布的使用,感... 目录前言一、基于权重的流量分配二、基于 Cookie 的分流三、基于请求头的分流四、基于请求参数的分

JavaScript中的Map用法完全指南

《JavaScript中的Map用法完全指南》:本文主要介绍JavaScript中Map用法的相关资料,通过实例讲解了Map的创建、常用方法和迭代方式,还探讨了Map与对象的区别,并通过一个例子展... 目录引言1. 创建 Map2. Map 和对象的对比3. Map 的常用方法3.1 set(key, v