使用输入滑块映射标记

2024-02-02

让我稍微解释一下这个项目。我有一个巨大的商店列表,其中包含地址(经度和纬度以及代码客户端......)。

现在,我的问题是,我必须能够根据 CodeClient 过滤这些标记,我的意思是根据 CodeClient 在谷歌地图中找到客户端。


实现方式和我之前提到的答案类似。您应该添加客户端代码的输入和搜索按钮。在创建标记的函数中,为每个标记添加属性“代码”marker.code = CodeClient;。当您单击搜索按钮时,它会执行filterByCode()功能。如果您传递空值,它将恢复所有标记。

看一下修改后的代码

// necessary variables
var map;
var infoWindow;
var markersData = [];
var markerCluster;
var markerArray = []; //create a global array to store markers

function initialize() {
  var mapOptions = {
    center: new google.maps.LatLng(32, -6),
    zoom: 7,
    mapTypeId: 'roadmap',
  };
  map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);

  // create MarkerClusterer, markersArray is not populated yet
  markerCluster = new MarkerClusterer(map, [], {
    imagePath: 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m'
  });

  // a new Info Window is created
  infoWindow = new google.maps.InfoWindow();

  // Event that closes the Info Window with a click on the map
  google.maps.event.addListener(map, 'click', function() {
    infoWindow.close();
  });
  // Finally displayMarkers() function is called to begin the markers creation
  displayMarkers();
}
google.maps.event.addDomListener(window, 'load', initialize);


// This function will iterate over markersData array
// creating markers with createMarker function
function displayMarkers() {

  // this variable sets the map bounds according to markers position
  var bounds = new google.maps.LatLngBounds();

  // for loop traverses markersData array calling createMarker function for each marker 
  $.get("https://gist.githubusercontent.com/abdelhakimsalama/358669eda44d8d221bf58c629402c40b/raw/bae93c852669a35f0e7053e9f8d068841ddf146a/get_data_google_api", function(response) {
    markersData = JSON.parse(response);
    for (var i = 0; i < markersData.length; i++) {

      var latlng = new google.maps.LatLng(markersData[i].Latitude, markersData[i].Longitude);
      var Route = markersData[i].Route;
      var Secteur = markersData[i].Secteur;
      var Agence = markersData[i].Agence;
      var CodeClient = markersData[i].CodeClient;
      var PrecisionGPS = markersData[i].PrecisionGPS;
      var Latitude = markersData[i].Latitude;
      var Longitude = markersData[i].Longitude;
      var BarCode = markersData[i].BarCode;
      var PrenomClient = markersData[i].PrenomClient;
      var NumAdresse = markersData[i].NumAdresse;
      var Tel = markersData[i].Tel;
      var Whatsapp = markersData[i].Whatsapp;
      var NbrFrigo = markersData[i].NbrFrigo;
      var OpenAm = markersData[i].OpenAm;
      var CloseAm = markersData[i].CloseAm;
      var OpenPm = markersData[i].OpenPm;
      var ClosePm = markersData[i].ClosePm;
      var OpenAmVen = markersData[i].OpenAmVen;
      var CloseAmVen = markersData[i].CloseAmVen;
      var OpenPmVen = markersData[i].OpenPmVen;
      var ClosePmVen = markersData[i].ClosePmVen;
      var OpenAmDim = markersData[i].OpenAmDim;
      var CloseAmDim = markersData[i].CloseAmDim;
      var OpenPmDim = markersData[i].OpenPmDim;
      var ClosePmDim = markersData[i].ClosePmDim;
      var IMEI = markersData[i].IMEI;
      var Date_Added = markersData[i].Date_Added;

      createMarker(latlng, Route, Agence, Secteur, CodeClient, PrecisionGPS, Latitude, Longitude, BarCode, PrenomClient, NumAdresse, Tel, Whatsapp, NbrFrigo, OpenAm, CloseAm, OpenPm, ClosePm, OpenAmVen, CloseAmVen, OpenPmVen, ClosePmVen, OpenAmDim, CloseAmDim, OpenPmDim, ClosePmDim, IMEI, Date_Added);

      // marker position is added to bounds variable
      bounds.extend(latlng);
    }
    // Finally the bounds variable is used to set the map bounds
    // with fitBounds() function
    map.fitBounds(bounds);
  });
}


// This function creates each marker and it sets their Info Window content
function createMarker(latlng, Route, Agence, Secteur, CodeClient, PrecisionGPS, Latitude, Longitude, BarCode, PrenomClient, NumAdresse, Tel, Whatsapp, NbrFrigo, OpenAm, CloseAm, OpenPm, ClosePm, OpenAmVen, CloseAmVen, OpenPmVen, ClosePmVen, OpenAmDim, CloseAmDim, OpenPmDim, ClosePmDim, IMEI, Date_Added) {

  var marker = new google.maps.Marker({
    map: map,
    position: latlng,
    title: CodeClient
  });
  
  marker.code = CodeClient;

  markerArray.push(marker); //push local var marker into global array
  // add marker to the MarkerClusterer
  markerCluster.addMarker(marker);

  // This event expects a click on a marker
  // When this event is fired the Info Window content is created
  // and the Info Window is opened.
  google.maps.event.addListener(marker, 'click', function() {


    var dicoFrigosDetails = {};


    var HTMLtext = "";
    for (var i = 1; i <= Object.keys(dicoFrigosDetails).length / 4; i++) {
      HTMLtext += '';
    }
    // Creating the content to be inserted in the infowindow
    var iwContent = '<div id="iw_container">' +
      '<div class="iw_title">Code Client : ' + CodeClient +
      '</div>' + '<div class="iw_content">Précision : ' + PrecisionGPS +
      '<br />Latitude : ' + Latitude +
      '<br />Longitude : ' + Longitude +
      '<br />Route : ' + Route +
      '<br />Secteur : ' + Secteur +
      '<br />Agence : ' + Agence +
      '<br />Code-barres : ' + BarCode +
      '<br />prenom de Client : ' + PrenomClient +
      //'<br />nom Complet de Client : ' + PrenomClient + ' ' + NomClient +
      '<br />Num Adresse : ' + NumAdresse +
      '<br />Téléphone : ' + Tel +
      '<br />Whatsapp : ' + Whatsapp +
      '<br />Nbr Frigos : ' + NbrFrigo + HTMLtext +
      '<br />Ouverture Matin : ' + OpenAm +
      '<br />Fermeture Matin : ' + CloseAm +
      '<br />Ouverture après-midi : ' + OpenPm +
      '<br />Fermeture Après-midi : ' + ClosePm +
      '<br />Ouverture Matin Ven : ' + OpenAmVen +
      '<br />Fermeture Matin Ven : ' + CloseAmVen +
      '<br />Ouverture après-midi Ven: ' + OpenPmVen +
      '<br />Fermeture après-midi Ven: ' + ClosePmVen +
      '<br />Ouverture Matin Dim : ' + OpenAmDim +
      '<br />Fermeture Matin Dim : ' + CloseAmDim +
      '<br />Ouverture après-midi Dim : ' + OpenPmDim +
      '<br />Fermeture après-midi Dim : ' + ClosePmDim +
      '<br />IMEI : ' + IMEI +
      '<br />Date Passage : ' + Date_Added +
      '</div>';

    // including content to the Info Window.
    infoWindow.setContent(iwContent);
    // opening the Info Window in the current map and at the current marker location.
    infoWindow.open(map, marker);
  });
}

function filterByCode() {
    var code = document.getElementById("code-client").value;
    var bounds = new google.maps.LatLngBounds();
    markerCluster.clearMarkers();
    if (code) {
        markerArray.forEach(function(marker) {
          marker.setMap(null);
        });

        var filtered = markerArray.filter(function(marker) {
          return marker.code === code;
        }); 
    
        if (filtered && filtered.length) {
          filtered.forEach(function(marker) {
            bounds.extend(marker.getPosition());
            marker.setMap(map);
          });
        
          markerCluster.addMarkers(filtered);
          markerCluster.redraw();
          
          map.fitBounds(bounds);
          
       }
    } else {
        markerArray.forEach(function(marker) {
            bounds.extend(marker.getPosition());
            marker.setMap(map);
        });
        
        markerCluster.addMarkers(markerArray);
        markerCluster.redraw();    
        map.fitBounds(bounds);
    }

}
html {
  height: 100%;
  background: gray;
}

body {
  height: 100%;
  margin: 0;
  padding: 0;
}

#map-canvas {
  height: 100%;
}

#iw_container .iw_title {
  font-size: 16px;
  font-weight: bold;
}

.iw_content {
  padding: 15px 15px 15px 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<title>InnoTech - Map - Server</title>
<meta charset="utf-8">
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js"></script>

<script type="text/javascript" src="https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/markerclusterer.js"></script>
<div id="search-code-container">
  <input id="code-client" title="Enter code" type="text" placeholder="Enter code (E.g. 511557)" value=""/>
  <input id="code-client-btn" type="button" value="Search" onclick="filterByCode()" />
</div> 
<div id="map-canvas" />

我希望这有帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用输入滑块映射标记 的相关文章

随机推荐

  • 如何“检查”函数是否确实给出随机结果?

    如何确定一个函数确实是随机的或者尽可能接近这个概念 另外 随机和伪随机之间有什么区别 最后 可以使用哪些算法 来源来生成随机数 P S 也问这个是因为 MySQL 语句使用ORDER BY RAND LIMIT 1没有给出令人信服的结果 随
  • 抽象类的可访问性不一致

    我有一个内部抽象类InternalClassBase和两个 也是内部 类InternalClass1 and InternalClass2 继承自InternalClassBase 我还有一个公共抽象类PublicClassBase和两个
  • 使用 Java 解析包含转义字符的字符串

    我想知道是否有人可以帮助我弄清楚如何解析具有以下格式的字符串 field1 field2 fieldN field1 field2 fieldN 每条记录均以 分隔记录中的每个字段均以 分隔 复杂的是各个字段可能包含转义分隔符 例如 或者
  • D3.js 如何旋转路径上的文本

    这是我的第一个 D3 项目 我不是程序员 所以一次性学习所有内容 我正在尝试制作一个圆形日历 我已经手绘了好几年了 这是一个巨大的痛苦 大多数位现在都可以工作 但我不知道如何将文本旋转 90 度在这条弧线上 一旦我转动了文本 我就需要弄清楚
  • 创建算法=未定义的定义器

    我从远程服务器备份了一些数据库 当我尝试导入该备份时 我的本地服务器遇到了问题 我在这一行收到错误 CREATE ALGORITHM UNDEFINED DEFINER root SQL SECURITY DEFINER VIEW tema
  • 如何重塑数据集(从长到宽),每个类别有两个测量列,而无需在 R 中进行额外计算

    我有长格式的数据集 请参阅下面的代码来生成此数据集 region week average percent A 20 5 30 A 21 7 40 A 22 15 50 B 20 4 15 B 21 8 27 B 22 3 11 我想准备它
  • 如何通过两个属性和排序器对对象列表进行排序

    我必须按姓氏和名字对对象列表进行排序 如果多个对象有相同的姓氏 我还必须对这些应用 Collat or 假设我可以对一个属性执行此操作 val collator Collator getInstance context getResourc
  • 如果在添加注释时缩放,MKMapView 会崩溃

    看来我遇到了一个问题 我可以可靠地导致我的MKMapView如果我在更改地图的可见区域时添加注释 则会崩溃 我已经将导致它的代码简化为一个非常简单的实现 并且我在这里重现它 NSMutableArray pointAnnotationArr
  • 在 if() 块中分配多个变量时出现意外行为

    本着看的精神像Python的 and 一样的短路评估 同时存储检查结果 https stackoverflow com q 39603391 2191572我决定看看如何在 PHP 中最好地解决这个问题 但我遇到了一个问题 意外
  • 当人们翻转图像视图时如何左右移动,使其看起来像真的向左和向右移动

    风格应该像iBooks或foursquare中的图片 当我们向左翻转时 我们会看到下一张图片被拉出 怎么办呢 有代码可以做到这一点吗 我认为一定有一个现成的代码 听起来像你想要的UIPageViewController https deve
  • 通过 ECDSA 证书问题提升 asio

    我正在使用 boost asio 实现 SSL 服务器 上下文初始化如下面的代码所示 boost asio ssl context base method SSL version static cast
  • 如何使用drawRect在现有视图中绘制?

    我正在做一个 GPS 跟踪应用程序 每次它收到纬度 经度时 都会将其转换为 x y 坐标并调用drawRect在两对 x y 之间画一条线 然而 drawRect方法只是在绘制新内容之前清除所有旧内容 我怎样才能让drawRect在现有的画
  • C#中如何通过接口实现事件?

    我有一个问题 假设我有一个基于插件的系统 我需要某种接口 用它可以捕获来自每个插件的事件 例如IReporting界面 IReporting object OnSomeEvent lt gt 但我找不到办法做到这一点 你应该写 IRepor
  • 我需要从 HTML 转到 Markdown,有什么建议吗?

    我正在使用 Maruku 从 Markdown 超集 转换为 HTML 你知道如何从 HTML 转换为 Markdown 吗 Google 发现了一个名为的 ruby 脚本反向降价 https github com xijo reverse
  • Pandas:时间序列数据:如何选择一小时、一天或一分钟的行?

    我的 csv 文件中有巨大的时间序列数据集 文件中有两列 values 这些是示例值 dttm utc 这些是收集样本时的时间戳 我已使用将数据导入 pandaspd read csv parse dates dttm utc 当我打印前
  • 如何在windows Qt中使用linux字体?

    我们在 MS Windows 上为 Linux 开发嵌入式 Qt 应用程序 目标平台是没有X windows framebuffer 的linux 不幸的是 Windows 上的屏幕看起来与 Linux 上的相同屏幕有很大不同 更好 因为
  • ADFS 与现有 ASP.Net MVC 应用程序

    我一直在四处寻找 试图找到如何将 ADFS 身份验证添加到现有 ASP Net MVC 应用程序的示例 我发现了很多关于在创建新应用程序时如何使用向导来完成此操作的示例 我可以创建一个新的应用程序并复制代码和配置 但这似乎是一种奇怪的方法
  • Caliburn Micro:在 ViewModel 之间传递对象

    我正在使用 Caliburn Micro 2 0 0 alpha2 开发一个简单的 Crud 应用程序 一个 Windows 8 1 商店应用程序 我在视图模型之间导航 传递对象时遇到麻烦 我多次阅读了提出的解决方案 安德斯 古斯塔夫森 如
  • 当我更改 DropDownList 上的选择时,为什么事件未触发?

    我有这个 asp net drp 框
  • 使用输入滑块映射标记

    让我稍微解释一下这个项目 我有一个巨大的商店列表 其中包含地址 经度和纬度以及代码客户端 现在 我的问题是 我必须能够根据 CodeClient 过滤这些标记 我的意思是根据 CodeClient 在谷歌地图中找到客户端 实现方式和我之前提