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

相关文章

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP

Java中JSON格式反序列化为Map且保证存取顺序一致的问题

《Java中JSON格式反序列化为Map且保证存取顺序一致的问题》:本文主要介绍Java中JSON格式反序列化为Map且保证存取顺序一致的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录背景问题解决方法总结背景做项目涉及两个微服务之间传数据时,需要提供方将Map类型的数据序列化为co

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

SpringBoot项目Web拦截器使用的多种方式

《SpringBoot项目Web拦截器使用的多种方式》在SpringBoot应用中,Web拦截器(Interceptor)是一种用于在请求处理的不同阶段执行自定义逻辑的机制,下面给大家介绍Sprin... 目录一、实现 HandlerInterceptor 接口1、创建HandlerInterceptor实

Web技术与Nginx网站环境部署教程

《Web技术与Nginx网站环境部署教程》:本文主要介绍Web技术与Nginx网站环境部署教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Web基础1.域名系统DNS2.Hosts文件3.DNS4.域名注册二.网页与html1.网页概述2.HTML概述3.

Python使用Reflex构建现代Web应用的完全指南

《Python使用Reflex构建现代Web应用的完全指南》这篇文章为大家深入介绍了Reflex框架的设计理念,技术特性,项目结构,核心API,实际开发流程以及与其他框架的对比和部署建议,感兴趣的小伙... 目录什么是 ReFlex?为什么选择 Reflex?安装与环境配置构建你的第一个应用核心概念解析组件

Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例

《Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例》本文介绍Nginx+Keepalived实现Web集群高可用负载均衡的部署与测试,涵盖架构设计、环境配置、健康检查、... 目录前言一、架构设计二、环境准备三、案例部署配置 前端 Keepalived配置 前端 Nginx

macOS Sequoia 15.5 发布: 改进邮件和屏幕使用时间功能

《macOSSequoia15.5发布:改进邮件和屏幕使用时间功能》经过常规Beta测试后,新的macOSSequoia15.5现已公开发布,但重要的新功能将被保留到WWDC和... MACOS Sequoia 15.5 正式发布!本次更新为 Mac 用户带来了一系列功能强化、错误修复和安全性提升,进一步增

Maven 依赖发布与仓库治理的过程解析

《Maven依赖发布与仓库治理的过程解析》:本文主要介绍Maven依赖发布与仓库治理的过程解析,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录Maven 依赖发布与仓库治理引言第一章:distributionManagement配置的工程化实践1