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

相关文章

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

JavaWeb 中的 Filter组件详解

《JavaWeb中的Filter组件详解》本文详细介绍了JavaWeb中的Filter组件,包括其基本概念、工作原理、核心接口和类、配置方式以及常见应用示例,Filter可以实现请求预处理、响应后... 目录JavaWeb 中的 Filter 详解1. Filter 基本概念1.1 什么是 Filter1.

Java Map排序如何按照值按照键排序

《JavaMap排序如何按照值按照键排序》该文章主要介绍Java中三种Map(HashMap、LinkedHashMap、TreeMap)的默认排序行为及实现按键排序和按值排序的方法,每种方法结合实... 目录一、先理清 3 种 Map 的默认排序行为二、按「键」排序的实现方式1. 方式 1:用 TreeM

Spring Boot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)

《SpringBoot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)》本文将以一个实际案例(用户管理系统)为例,详细解析SpringBoot中Co... 目录引言:为什么学习Spring Boot分层架构?第一部分:Spring Boot的整体架构1.1

修复已被利用的高危漏洞! macOS Sequoia 15.6.1发布

《修复已被利用的高危漏洞!macOSSequoia15.6.1发布》苹果公司于今日发布了macOSSequoia15.6.1更新,这是去年9月推出的macOSSequoia操作... MACOS Sequoia 15.6.1 正式发布!此次更新修复了一个已被黑客利用的严重安全漏洞,并解决了部分中文用户反馈的

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

Python Web框架Flask、Streamlit、FastAPI示例详解

《PythonWeb框架Flask、Streamlit、FastAPI示例详解》本文对比分析了Flask、Streamlit和FastAPI三大PythonWeb框架:Flask轻量灵活适合传统应用... 目录概述Flask详解Flask简介安装和基础配置核心概念路由和视图模板系统数据库集成实际示例Stre