首页 > 其他分享 >通用方式实现Map

通用方式实现Map

时间:2024-02-20 10:47:05浏览次数:18  
标签:Map popup 通用 方式 map 地图 Leaflet API var

通用方式实现Map

ChatGpt

实现展示地图并在地图上提供操作选项的技术栈可以包括:

  • Web开发技术:HTML、CSS、JavaScript
  • 地图API:如Google Maps API、Mapbox API、Leaflet等
  • 前端框架:如React、Vue.js、Angular等
  • 后端技术:如Node.js、Django、Flask等(如果需要与后端交互)
  • 数据库:如MySQL、MongoDB等(如果需要存储地图数据)
  • 移动开发技术:如React Native、Flutter(如果需要在移动端展示地图)

通用方式实现地图通常涉及使用地图API来获取地图数据,并在网页或应用程序中显示地图。
常见的地图API包括Google Maps API、Mapbox API和Leaflet等。

以下是一个使用Leaflet库实现地图的简单示例代码:

<!DOCTYPE html>
<html>
<head>
    <title>Simple Leaflet Map</title>
    <link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/leaflet.css" />
    <style>
        #map {
            height: 400px;
        }
    </style>
</head>
<body>
    <div id="map"></div>
    
    <script src="https://unpkg.com/[email protected]/dist/leaflet.js"></script>
    <script>
        var map = L.map('map').setView([51.505, -0.09], 13);
        
        L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
            attribution: '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
        }).addTo(map);
    </script>
</body>
</html>

在上面的代码中,我们使用Leaflet库创建了一个简单的地图,并加载了OpenStreetMap的瓦片图层。


Google Maps API、Mapbox API和Leaflet都是在线地图服务,通常需要连接互联网才能加载地图数据。但是,它们也提供了一些离线功能或解决方案,可以在没有网络连接的情况下使用地图。

  • Google Maps API: Google Maps API本身并不直接支持离线功能,但可以通过一些第三方工具或库实现离线地图的功能,比如Google Maps SDK for Android和Google Maps SDK for iOS可以缓存部分地图数据供离线使用。

  • Mapbox API: Mapbox提供了Mapbox SDK来支持离线地图功能。开发者可以使用Mapbox SDK下载地图数据并存储在本地,然后在没有网络连接的情况下使用这些离线地图数据。

  • Leaflet: Leaflet本身并不直接支持离线功能,但可以通过一些插件来实现离线地图功能,比如Leaflet.TileLayer.Cordova或Leaflet.Offline可以帮助开发者实现离线地图功能。


Leaflet

  • Leaflet官方网站

  • Leaflet API reference

  • Leaflet Tutorials

  • an open-source JavaScript library for mobile-friendly interactive maps

  • Leaflet is the leading open-source JavaScript library for mobile-friendly interactive maps. Weighing just about 42 KB of JS, it has all the mapping features most developers ever need.

create a map in the 'map' div, add tiles of our choice, and then add a marker with some text in a popup

var map = L.map('map').setView([51.505, -0.09], 13);

L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
    maxZoom: 19,
    attribution: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
}).addTo(map);
//marker
L.marker([51.5, -0.09]).addTo(map)
    .bindPopup('A pretty CSS popup.<br> Easily customizable.')
    .openPopup();
//circle
var circle = L.circle([51.508, -0.11], {
    color: 'red',
    fillColor: '#f03',
    fillOpacity: 0.5,
    radius: 500
}).addTo(map);
//polygon
var polygon = L.polygon([
    [51.509, -0.08],
    [51.503, -0.06],
    [51.51, -0.047]
]).addTo(map);
//Popup
//marker.bindPopup("<b>Hello world!</b><br>I am a popup.").openPopup();
circle.bindPopup("I am a circle.");
polygon.bindPopup("I am a polygon.");
//Popup only
var popup = L.popup()
    .setLatLng([51.513, -0.09])
    .setContent("I am a standalone popup.")
    .openOn(map);

//Event
// function onMapClick(e) {
//     alert("You clicked the map at " + e.latlng);
// }
var popup = L.popup();
function onMapClick(e) {
    popup
        .setLatLng(e.latlng)
        .setContent("You clicked the map at " + e.latlng.toString())
        .openOn(map);
}
map.on('click', onMapClick);

Custom Icon

  • prepare images:
    the white area in the images is actually transparent.
  • Use L.icon
var greenIcon = L.icon({
    iconUrl: 'leaf-green.png',
    shadowUrl: 'leaf-shadow.png',

    iconSize:     [38, 95], // size of the icon
    shadowSize:   [50, 64], // size of the shadow
    iconAnchor:   [22, 94], // point of the icon which will correspond to marker's location
    shadowAnchor: [4, 62],  // the same for the shadow
    popupAnchor:  [-3, -76] // point from which the popup should open relative to the iconAnchor
});

L.marker([51.5, -0.09], {icon: greenIcon}).addTo(map);
  • Use Class
var LeafIcon = L.Icon.extend({
    options: {
        shadowUrl: 'leaf-shadow.png',
        iconSize:     [38, 95],
        shadowSize:   [50, 64],
        iconAnchor:   [22, 94],
        shadowAnchor: [4, 62],
        popupAnchor:  [-3, -76]
    }
});

var greenIcon = new LeafIcon({iconUrl: 'leaf-green.png'}),
    redIcon = new LeafIcon({iconUrl: 'leaf-red.png'}),
    orangeIcon = new LeafIcon({iconUrl: 'leaf-orange.png'});


L.icon = function (options) {
    return new L.Icon(options);
};

附录

[email protected]

<!DOCTYPE html>
<html>

<head>
    <title>Simple Leaflet Map</title>
    <link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/leaflet.css"
        integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY=" crossorigin="" />
    <style>
        #map {
            height: 400px;
        }
    </style>
</head>

<body>
    <div id="map"></div>

    <!-- Make sure you put this AFTER Leaflet's CSS -->
    <script src="https://unpkg.com/[email protected]/dist/leaflet.js"
        integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo=" crossorigin=""></script>
    <script>
        var map = L.map('map').setView([51.505, -0.09], 13);

        L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
            maxZoom: 19,
            attribution: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
        }).addTo(map);
        //marker
        L.marker([51.5, -0.09]).addTo(map)
            .bindPopup('A pretty CSS popup.<br> Easily customizable.')
            .openPopup();
        //circle
        var circle = L.circle([51.508, -0.11], {
            color: 'red',
            fillColor: '#f03',
            fillOpacity: 0.5,
            radius: 500
        }).addTo(map);
        //polygon
        var polygon = L.polygon([
            [51.509, -0.08],
            [51.503, -0.06],
            [51.51, -0.047]
        ]).addTo(map);
        //Popup
        //marker.bindPopup("<b>Hello world!</b><br>I am a popup.").openPopup();
        circle.bindPopup("I am a circle.");
        polygon.bindPopup("I am a polygon.");
        //Popup only
        var popup = L.popup()
            .setLatLng([51.513, -0.09])
            .setContent("I am a standalone popup.")
            .openOn(map);

        //Event
        // function onMapClick(e) {
        //     alert("You clicked the map at " + e.latlng);
        // }
        var popup = L.popup();
        function onMapClick(e) {
            popup
                .setLatLng(e.latlng)
                .setContent("You clicked the map at " + e.latlng.toString())
                .openOn(map);
        }
        map.on('click', onMapClick);


    </script>
</body>

</html>

标签:Map,popup,通用,方式,map,地图,Leaflet,API,var
From: https://www.cnblogs.com/yongchao/p/18022558

相关文章

  • Map判空 、空字符串、空key值等各种判断方法
    一、Map本身的判空1.1“==null”不能判断Map的本身是否为null  1.2map.isEmpty()判断为空当map没有向里面put数据的时候,可以利用map自带得方法来进行判断该Map是否里面有值 1.3“==null”与“isEmpty()”最大的区别如果map是一个null存在,那么在利用isEmpty()来判空将......
  • Python Paramiko模块-exec_command() 和 invoke_shell() 两种操作方式
    前言Paramiko是Python语言的一个SSH客户端。可以远程连接Linux服务器,通过python对Linux进行操作,可以实现进行对远程服务器进行下载和上传文件操作。exec_command()操作importparamikossh=paramiko.SSHClient()ssh.set_missing_host_key_policy(paramiko.AutoAd......
  • 解决MyBatis Mapper 的XML文件SQL语句无法自动提示问题
    一、问题1.问题场景IDEA中MyBatis编写mapper的SQL语句的时候无法提示SQL和数据库2.问题描述无法正常方便的使用IDEA的提示功能,更准确无误的编写代码3.本解决方案优势亲测可用,一劳永逸(IDEA版本IntelliJIDEA2021.1.3 )目的在于对Mybatis的Mapper.XML中sql语句进行提示......
  • Web自动化三种等待方式,一篇文章教会你
    三种等待方式简介在实际工作中等待机制可以保证代码的稳定性,保证代码不会受网速、电脑性能等条件的约束。等待就是当运行代码时,如果页面的渲染速度跟不上代码的运行速度,就需要人为的去限制代码执行的速度。在做Web自动化时,一般要等待页面元素加载完成后,才能执行操作,否则会......
  • mapPartition与map函数
    dd的mapPartitions是map的一个变种,它们都可进行分区的并行处理。两者的主要区别是调用的粒度不一样:map的输入变换函数是应用于RDD中每个元素,而mapPartitions的输入函数是应用于每个分区。Map算子是分区内一个数据一个数据的执行,类似于串行操作。而mapPartitions算子是以分区为......
  • 03 进阶篇-高阶数据类型BitMaps、HyperLogLogs
    BitMaps介绍BitMaps的基本概念,它是一种通过位来表示数据的方法,能高效地处理大量布尔值。展示BitMaps在用户在线状态、统计等方面的应用示例。介绍相关的命令,如SETBIT,GETBIT,BITCOUNT,BITOP等。BitMaps的基本概念BitMaps,或称为位图,是Redis中用于高效处理大量布尔值的......
  • 对提问方式的思考
    提问的智慧 https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/README-zh_CN.md在阅读这篇文章以后,总体来说,我希望我尽量能够做到上面所提醒的内容。关于提问,我觉得要获得解答,首先需要让对方完全理解自己的疑问,要做到这一点,应该学会站在别人的角......
  • Splunk ES 接入 log 的方式
    SplunkES接入log的方式主要有两种:使用SplunkUniversalForwarder(UF)UF是一个轻量级的代理,可以安装在各种操作系统和设备上。它可以收集各种类型的日志文件,并将它们发送到SplunkES进行索引和分析。使用HTTPEventCollector(HEC)HEC是一个RESTfulAPI,可以......
  • C++ STL map
    map<int,string>MyMap;//下标方式key值重复进行替换MyMap[0]="233";MyMap[0]="23333";//insert方法key值重复无法插入MyMap.insert(pair<int,string>(1,"zhangsan"));MyMap.insert(pair<int,string>(1,"zhangsan2"))......
  • 走出精神内耗最好的方式是什么?
      叔本华说:“人性有一个最特别的弱点,就是在意别人如何看待自己。”生活中,很多人之所以不快乐,就是因为太在乎周围人的反应。同事无意间的一个眼神,会让心情失落许久;朋友不经意的一句话,会默默纠结半天。太过在意别人的看法和评价,后果往往是,在敏感和讨好中委屈了自己。你要明白,生活......