'হোম' বোতাম লিফলেট মানচিত্র


11

আমার লিফলেট মানচিত্রে এমন একধরণের হোম বোতাম থাকার সম্ভাবনা আছে যা যথাক্রমে আমার প্রাথমিক মানচিত্রের ভিউ বা নির্দিষ্ট নির্দিষ্ট অবস্থানটিতে জুম করবে?

উত্তর:


17

নিম্নলিখিতটি লিফলেট মানচিত্রে হোম বোতামের সাহায্যে একটি কাস্টম জুম নিয়ন্ত্রণ যুক্ত করবে। হোম আইকন হরফ হ'ল ফন্ট থেকে , তাই সেই উল্লেখটি অন্তর্ভুক্ত করার বিষয়ে নিশ্চিত হন।

কাজ এখানে বেড়ান ।

এইচটিএমএল:

<html>
<head>
    <link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.css" />
</head>
<body>
    <div id="map"></div>
    <script src="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.js"></script>
    <link href="http://maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet">

CSS:

#map { height: 340px; }
.leaflet-bar a { background-color: #fff; border-bottom: 1px solid #ccc; color: #444; display: block; height: 26px; width: 26px; line-height: 1.45 !important; text-align: center; text-decoration: none; font: bold 18px 'Lucida Console', Monaco, monospace; }

জাভাস্ক্রিপ্ট:

var lat = 51.505;
var lng = -0.09;
var zoom = 12;

// set up the map and remove the default zoomControl
var map = L.map('map', {
    zoomControl: false
});

map.setView([lat, lng], zoom);
L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
    maxZoom: 18
}).addTo(map);

// custom zoom bar control that includes a Zoom Home function
L.Control.zoomHome = L.Control.extend({
    options: {
        position: 'topright',
        zoomInText: '+',
        zoomInTitle: 'Zoom in',
        zoomOutText: '-',
        zoomOutTitle: 'Zoom out',
        zoomHomeText: '<i class="fa fa-home" style="line-height:1.65;"></i>',
        zoomHomeTitle: 'Zoom home'
    },

    onAdd: function (map) {
        var controlName = 'gin-control-zoom',
            container = L.DomUtil.create('div', controlName + ' leaflet-bar'),
            options = this.options;

        this._zoomInButton = this._createButton(options.zoomInText, options.zoomInTitle,
        controlName + '-in', container, this._zoomIn);
        this._zoomHomeButton = this._createButton(options.zoomHomeText, options.zoomHomeTitle,
        controlName + '-home', container, this._zoomHome);
        this._zoomOutButton = this._createButton(options.zoomOutText, options.zoomOutTitle,
        controlName + '-out', container, this._zoomOut);

        this._updateDisabled();
        map.on('zoomend zoomlevelschange', this._updateDisabled, this);

        return container;
    },

    onRemove: function (map) {
        map.off('zoomend zoomlevelschange', this._updateDisabled, this);
    },

    _zoomIn: function (e) {
        this._map.zoomIn(e.shiftKey ? 3 : 1);
    },

    _zoomOut: function (e) {
        this._map.zoomOut(e.shiftKey ? 3 : 1);
    },

    _zoomHome: function (e) {
        map.setView([lat, lng], zoom);
    },

    _createButton: function (html, title, className, container, fn) {
        var link = L.DomUtil.create('a', className, container);
        link.innerHTML = html;
        link.href = '#';
        link.title = title;

        L.DomEvent.on(link, 'mousedown dblclick', L.DomEvent.stopPropagation)
            .on(link, 'click', L.DomEvent.stop)
            .on(link, 'click', fn, this)
            .on(link, 'click', this._refocusOnMap, this);

        return link;
    },

    _updateDisabled: function () {
        var map = this._map,
            className = 'leaflet-disabled';

        L.DomUtil.removeClass(this._zoomInButton, className);
        L.DomUtil.removeClass(this._zoomOutButton, className);

        if (map._zoom === map.getMinZoom()) {
            L.DomUtil.addClass(this._zoomOutButton, className);
        }
        if (map._zoom === map.getMaxZoom()) {
            L.DomUtil.addClass(this._zoomInButton, className);
        }
    }
});
// add the new control to the map
var zoomHome = new L.Control.zoomHome();
zoomHome.addTo(map);

অসাধারণ! এটি মনোমুগ্ধকর মত কাজ করে! আপনাকে অনেক ধন্যবাদ!
hoge6b01


4
কোডটি ব্যবহার করার আরও সহজ করার জন্য আমি এই সুন্দর টুকরো কোডটিকে লিফলেট প্লাগইনে পরিণত করেছি । ধন্যবাদ, টমস!
ফ্লোরিয়ান ব্রুকার

@ টমস আমি আপনার কোড থেকে তৈরি লিফলেট প্লাগইনটি বর্তমানে আপনার মূল কোডের মতো সিসি-বাই-এসএ এর অধীনে লাইসেন্সযুক্ত । তবে সিসি-বাই-এসএ সফ্টওয়্যারটির জন্য সত্যিই উপযুক্ত নয় , তাই আমি প্লাগইনের লাইসেন্সটি এমআইটিতে পরিবর্তন করতে চাই । এর জন্য মূল কোডটির লেখক হিসাবে আপনার অনুমতি চাই। আপনি কি ঠিক আছে?
ফ্লোরিয়ান ব্রুকার

আপডেট লিঙ্ক সহ নিউ বেহালার প্রচারপত্রটি হবে: jsfiddle.net/pqfche83/1
Tikky

7

সঙ্গে Leaflet.EasyButton , জিনিষ প্রশংসনীয় পরিষ্কার থাকার: (যদি আপনি চান হোভার পাঠ্য) আপনার আইকনের এবং ফাংশন নাম:

var home = {
  lat: 70.3,
  lng: 50.5,
  zoom: 8
}; 

L.easyButton('fa-home',function(btn,map){
  map.setView([home.lat, home.lng], home.zoom);
},'Zoom To Home').addTo(map);

(একপাশে) এবং জুম উদাহরণ ইজবটন দিয়ে টমস দ্বারা উত্তর:

// make a bar with the buttons
var zoomBar = L.easyBar([
  L.easyButton( '<big>+</big>',  function(control, map){map.setZoom(map.getZoom()+1);}),
  L.easyButton( 'fa-home fa-lg', function(control, map){map.setView([home.lat, home.lng], home.zoom);})
  L.easyButton( '<big>-</big>',  function(control, map){map.setZoom(map.getZoom()-1);}),
]);

// add it to the map
zoomBar.addTo(map);

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.