在 Google 地图之外保存地图实例

2023-12-12

我制作了一个谷歌地图 API (HTML) 脚本,当用户单击地图时,它会创建标记。我还集成了 Google+ 登录功能,因此用户是独一无二的并且拥有个人资料。我现在想要做到这一点,以便用户可以在他们想要的位置上创建标记,然后保存地图,以便他们稍后可以返回。然而我不希望他们使用这个“https://developers.google.com/maps/documentation/javascript/examples/save-widget” 提供的功能,因为标记会同步到他们的 google+。换句话说,我只想将标记保存到我的网站,而不是他们的个人谷歌地图。我将如何仅在我的网站上保存地图的状态? 这是我的代码的小提琴:https://jsfiddle.net/hgvsurt5/代码如下:

<head>
    <style>
        #map-canvas {
            width: 900px;
            height: 600px;
        }
        .controls {
            margin-top: 16px;
            border: 1px solid transparent;
            border-radius: 2px 0 0 2px;
            box-sizing: border-box;
            -moz-box-sizing: border-box;
            height: 32px;
            outline: none;
            box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);
        }
        #pac-input {
            background-color: #fff;
            font-family: Roboto;
            font-size: 15px;
            font-weight: 300;
            margin-left: 12px;
            padding: 0 11px 0 13px;
            text-overflow: ellipsis;
            width: 400px;
        }
        #pac-input:focus {
            border-color: #4d90fe;
        }
        .pac-container {
            font-family: Roboto;
        }
        #type-selector {
            color: #fff;
            background-color: #4d90fe;
            padding: 5px 11px 0px 11px;
        }
        #type-selector label {
            font-family: Roboto;
            font-size: 13px;
            font-weight: 300;
        }
    </style>
    <title>Places search box</title>
    <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&signed_in=true&libraries=places"></script>
    <script>
        // This example adds a search box to a map, using the Google Place Autocomplete
        // feature. People can enter geographical searches. The search box will return a
        // pick list containing a mix of places and predicted search terms.

        function initialize() {
            var marker = []
            var map = new google.maps.Map(document.getElementById('map-canvas'), {
                mapTypeId: google.maps.MapTypeId.ROADMAP
            });

            var defaultBounds = new google.maps.LatLngBounds(
            new google.maps.LatLng(-33.8902, 151.1759),
            new google.maps.LatLng(-33.8474, 151.2631));
            map.fitBounds(defaultBounds);

            // Create the search box and link it to the UI element.
            var input = /** @type {HTMLInputElement} */
            (
            document.getElementById('pac-input'));
            map.controls[google.maps.ControlPosition.TOP_LEFT].push(input);

            var searchBox = new google.maps.places.SearchBox(
            /** @type {HTMLInputElement} */
            (input));

            // [START region_getplaces]
            // Listen for the event fired when the user selects an item from the
            // pick list. Retrieve the matching places for that item.
            google.maps.event.addListener(searchBox, 'places_changed', function() {
                var places = searchBox.getPlaces();

                if (places.length == 0) {
                    return;
                }
    </script>
    <script>
        var map;
        var myCenter = new google.maps.LatLng(51.508742, -0.120850);

        function initialize() {
            var mapProp = {
                center: myCenter,
                zoom: 5,
                mapTypeId: google.maps.MapTypeId.ROADMAP
            };

            map = new google.maps.Map(document.getElementById("googleMap"), mapProp);

            google.maps.event.addListener(map, 'click', function(event) {
                placeMarker(event.latLng);
            });
        }

        function placeMarker(location) {
            var marker = new google.maps.Marker({
                position: location,
                map: map,
                draggable: true,
            });
            var infowindow = new google.maps.InfoWindow({
                content: 'Latitude: ' + location.lat() + '<br>Longitude: ' + location.lng()
            });
            infowindow.open(map, marker);
        }

        google.maps.event.addDomListener(window, 'load', initialize);
    </script>
</head>

<body>
    <div id="googleMap" style="width:900px;height:600px;"></div>
</body>

您必须以某种方式将所需的数据转换为可以发送和存储的格式。一个好的方法是使用Data-layer要在地图上绘制要素,您可以轻松使用该方法toGeoJson数据层将数据转换为 geoJson 并将其发送到服务器(存储数据的位置)。

一个简单的实现:

function initialize() {
  var map = new google.maps.Map(document.getElementById("googleMap"), {
      center: new google.maps.LatLng(51.508742, -0.120850),
      zoom: 5,
      noClear: true
    }),
    //this may be the stored data
    data = {
      "type": "FeatureCollection",
      "features": [{
        "type": "Feature",
        "geometry": {
          "type": "Point",
          "coordinates": [-0.120850, 51.508742]
        },
        "properties": {}
      }]
    },
    win = new google.maps.InfoWindow,
  
      
    //some buttons for interaction
    ctrl = document.getElementById('datactrl'),


    fx = {
      'data-save': {
        click: function() {
          //use this method to store the data somewhere,
          //e.g. send it to a server
          map.data.toGeoJson(function(json) {
            data = json;
          });

        }
      },
      'data-show': {
        click: function() {

          alert('you may send this JSON-string to a server and store it there:\n\n' +
            JSON.stringify(data))
        }
      },
      'data-load': {
        click: function() {
          //use this method to load the data from somwhere
          //e.g. from a server via loadGeoJson

          map.data.forEach(function(f) {
            map.data.remove(f);
          });
          map.data.addGeoJson(data)
        },
        init: true
      },
      'data-clear': {
        click: function() {
          //use this method to clear the data
          //when you also want to remove the data on the server 
          //send a geoJSON with empty features-array to the server

          map.data.forEach(function(f) {
            map.data.remove(f);
          });
          data = {
            type: "FeatureCollection",
            features: []
          };


        }
      }
    };


  for (var id in fx) {
    var o = ctrl.querySelector('input[id=' + id + ']');
    google.maps.event.addDomListener(o, 'click', fx[id].click);
    if (fx[id].init) {
      google.maps.event.trigger(o, 'click');
    }
  }




  map.controls[google.maps.ControlPosition.TOP_CENTER].push(ctrl);


  

  function placeMarker(location) {
    var feature = new google.maps.Data.Feature({
      geometry: location
    });
    map.data.add(feature);
  }
  google.maps.event.addListener(map, 'click', function(event) {
    placeMarker(event.latLng);
  });


  google.maps.event.addListener(map.data, 'click', function(e) {
    if (e.feature.getGeometry().getType() === 'Point') {

      win.setOptions({
        content: 'Latitude: ' + e.feature.getGeometry().get().lat() +
          '<br>Longitude: ' + e.feature.getGeometry().get().lng(),
        pixelOffset: new google.maps.Size(0, -40),
        map: map,
        position: e.feature.getGeometry().get()
      });
    }
  });
}



google.maps.event.addDomListener(window, 'load', initialize);
html,
body,
#googleMap {
  height: 100%;
  margin: 0;
  padding: 0;
}
<script src="https://maps.googleapis.com/maps/api/js?v=3"></script>
<div id="googleMap">
  <div id="datactrl">
    <input type="button" id="data-save" value="save" />
    <input type="button" id="data-show" value="show saved data" />
    <input type="button" id="data-load" value="load saved data" />
    <input type="button" id="data-clear" value="remove all data" />
  </div>
</div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Google 地图之外保存地图实例 的相关文章

  • 方向改变后的javascript最大视口高度Android和iOS

    目标 查找设备的最大视口高度 包括设备的空间address bar这样我们就可以动态调整 min body 的大小并将内容向上推 问题 移动浏览器处理方向状态的方式不同 方向变化时更新 DOM 属性的方式也不同 使用 JavaScript
  • 提交表单时显示警告框

    所以我有这两页 pageOne php and pageTwo php 表格在pageOne php
  • MP4 视频无法在 Firefox 上播放

    我有一个小型家庭服务器 可以托管多个项目 其中包括一些 MP4 示例视频 我一直在使用一个简单的
  • 更改 3 列显示的比例:表格/表格单元格

    我有这个简单的设置 container display table width 70 text align center div border 1px solid 336 column display table cell div clas
  • bootstrap css中垂直对齐缩略图?

    我认为这应该很简单 但我就是无法让它发挥作用 在 ASP NET MVC 中 我有一个如下所示的项目列表 div class row div class span12 ul class thumbnails foreach var film
  • Antd select 元素:如何禁用输入?

    我正在尝试使用模式 multiple 的选择元素 我希望禁用输入 这意味着用户只能在现有选项之间进行选择 而不能输入文本 我该怎么做呢 我的元素 import Select from antd import antd dist antd c
  • HTML5 安卓开发

    我对制作 Android 应用程序很感兴趣 而我的主要爱好是 Web 开发 现在让我困惑的是 人们用 HTML5 CSS3 JavaScript 语言制作应用程序 这些应用程序是在 Android 手机上的网络浏览器上运行还是像 Andro
  • 如何在我的网站上获取用户的国旗

    我想在我的网站上显示用户 访问者的国旗 我使用不同的技术 如 php jsp 和简单的 html 所以我想要一个代码 通过放置在我的网站上 访问者可以看到它 并且它应该在所有平台上运行 简而言之 我想要国家检测 API 如果有人能帮助我 我
  • 图像上的文本和背景颜色叠加

    我正在尝试创建一个与图像大小完全匹配的纯色叠加层 并在该叠加层上显示文本 如果可能的话 我想仅使用 HTML 和 CSS 来完成此操作 图像可以是任何大小 并且将调整大小以适合其父容器并居中 像这样的东西 不起作用 HTML div cla
  • 使用 google 查询邮政编码距离

    我有两个邮政编码列表 R 语言 其中一个是孩子的地址及其学业成绩 另一个是学校的地址 我希望能够为每个孩子找到最近的学校 所以大概需要通过转换为长和纬度值来计算邮政编码之间的距离 然后我希望能够在谷歌地图上绘制每所学校的所有孩子 并看看住在
  • HTML 解析 - 从 div 内的表格获取数据?

    我对 HTML 解析 抓取的整个想法还比较陌生 我希望我能来这里获得我需要的帮助 基本上我想要做的 我认为 是指定我希望从中获取数据的页面的 url 在这种情况下 http www epgpweb com guild us Caelestr
  • 如何将内部 div 与外部 div 的底部对齐?

    我需要将内部 div 与外部 div 的底部对齐 我的代码如下所示 div class myOuterDiv div class div1 floatLeft Variable content here div div class div2
  • 如何将身份验证详细信息传递给 iframe 内的应用程序?

    我有一个网页 想在其中显示詹金斯的网页 因此使用iframe like But http xxx xxx xx xx 8080 view Nightly 20Builds 20 打开登录页面 因此无法直接显示内容 其实我想在没有登录的情况下
  • CSS/XHTML 菜单 - 在所有浏览器中工作 - IE6 帮助

    我发现这个菜单正是我想要的 它适用于所有现代浏览器和 IE 7 8 我需要找到一个修复程序才能在 IE6 中工作 任何帮助将不胜感激 http lab returnwt net htmlcss tabmenu http lab return
  • 如何使用 Nokogiri 漂亮地打印 HTML?

    我用 Ruby 编写了一个网络爬虫 并且正在使用Nokogiri HTML来解析页面 我需要打印该页面 在 IRB 中闲逛时 我注意到一个pretty print方法 然而它需要一个参数 我不知道它想要什么 我的爬虫正在缓存网页的 HTML
  • Internet Explorer 10,最大 div 大小为 1.533.917 像素

    我需要制作一个非常大的 div 以百万像素为单位 搜索我发现这个线程证明 IE 可以管理最多 10 000 000 px 确定最大可能的 DIV 高度 https stackoverflow com questions 7719273 de
  • 从动态服务器中抓取 html 列表数据

    哈喽大家好 抱歉提出转储问题 这是我最后的手段 我发誓我尝试了无数其他 Stackoverflow 问题 不同的框架等 但这些似乎没有帮助 我有以下问题 一个网站显示一个数据列表 前面有大量的 div li span 等标签 它是一个很大的
  • 使用 Javascript 编辑和保存用户 HTML - 安全性如何?

    例如我有一个Javascript 支持的表单创建工具 您可以使用链接添加元素的 html 块 如输入字段 并使用 TinyMCE 来编辑文本 这些是通过自动保存功能保存的 该功能在特定事件的后台执行 AJAX 调用 被调用的保存函数负责数据
  • 电子邮件通讯未正确呈现

    我是 CSS 和 HTML 新手 我有一个包含 HTML 和 CSS 代码的电子邮件模板 我在新闻通讯模板的右上角放置了一个粉色圆圈框 http www pedersenshotell se newsletter http www pede
  • 将 SVG 元素放置在图像上

    是否可以拥有以下元素并设置它们的样式 以便 SVG 对象出现在图像上 即像图像的一部分 目前它们显示在其下方的新行中 我知道我可以将图像设置为父 div 的背景图像 但不幸的是我还需要能够在父级内旋转它 所以我认为这不是一个选项 div s

随机推荐

  • 如何获取接近另一种颜色的RGB值?

    如果我有 RGB 颜色 如何创建一个 javascript 函数 当另一个 RGB 值接近初始 RGB 时返回 true 否则返回 false 我已经使用过这个并且它对我来说非常有效 assuming that color1 and col
  • 如何在Python 3中通过FTP从内存上传数据?

    我想通过 FTP 将内存中的各种数据 数组内容 静态 html 代码等 上传到网络服务器 这仅适用于一个基本字符串 Hello World from ftplib import FTP import io bio io BytesIO b
  • 移动应用程序时会重置用户设置

    我注意到 如果您将该应用程序 exe 文件移动到另一个位置 用户设置将重置 据我了解 发生这种情况是因为应用程序数据文件夹中的位置也基于 exe 的路径 在生成哈希时会考虑到这一点 我知道有不同的替代方案 可以使用注册表或手动创建自定义配置
  • 将 null 放置在列表末尾

    我需要将空对象放置在末尾List 这是我为此目的所做的示例 public static void main String args List
  • 如何显示ProgressBar并使其进度?(Xamarin.Android)

    我调用一个 Web 服务 它获取 4 个文件 在加载这些文件时 我想向用户显示进度 圆形或水平都没关系 我已按照互联网上的示例进行操作 但屏幕上没有显示任何内容 MobileSellReference Service1 service ne
  • 有没有办法分析 Chromecast 崩溃?

    显然 崩溃后 端口 9222 上的开发者工具没有任何用处 因为 远程调试已因原因终止 websocket close 例如 我如何检索记录的时间线 或获取调用堆栈 或者找到有关 Chromecast 决定自行重启的原因的任何信息 调试 Ch
  • 在 JS 中移动元素

    我正在学习 javascript 并尝试做一个简单的练习 我有一个文本框并想用键盘控制它 我的 HTML 如下 目前 我只是尝试 1 个方向 const myBox document querySelector h1 document ad
  • D3 节点半径取决于链接数量:权重属性

    我正在尝试使用 D3 创建力定向图 就目前而言 节点的半径取决于核心价值JSON 中的对 d 尺寸 我知道d3 权重属性可用于计算链接数量并关联圆的半径属性 但我不知何故无法让它工作 请在这件事上给予我帮助 找到下面的代码 d3 json
  • “合并”替换 Keras/Tensorflow/Python3

    Merge 未在 Keras Tensorflow Python3 版本上运行 在以前的版本中 合并正在运行 但现在 它没有运行 所以我想我应该用替换 合并 来转换此代码 新的 Keras Tensorflow Python3 版本中缺少
  • 给定一个数组,找出每个元素的下一个较小元素

    给定一个数组 在不改变元素原始顺序的情况下 为每个元素找到数组中下一个较小的元素 例如 假设给定数组为 4 2 1 5 3 结果数组将为 2 1 1 3 1 我在一次采访中被问到这个问题 但我想不出比简单的 O n 2 解决方案更好的解决方
  • SQLite是否支持“删除自”

    这是 Microsoft SQL Server 的 T SQL 上的有效语法 但在 SQLite 中无效 是否有在 SQLite 中执行相同操作的替代语法 DELETE FROM something FROM something INNER
  • HTML元素的id属性在整个页面中必须是唯一的吗?

    我正在使用 jQuery 我只是想知道 ID 在整个页面中是否必须始终是唯一的 我知道课程可以重复多次 那么 ID 呢 是的 它必须是独一无二的 HTML4 https www w3 org TR html4 struct global h
  • 如果循环正在运行,wifi.sta 模块会连接吗?

    我试图检测模块何时实际连接到我的 wifi AP 因为 connect 没有回调 我做了如下简单的事情 wifi sta config SSID password wifi sta connect tmr delay 1000000 i 0
  • 在 es6 中添加行而不推送反应状态

    我不确定我做的是正确的事情 我在 setState 之外改变变量 这很好 对吧 或者有更优雅的方法来做到这一点 state persons name jay age 10 addRow gt const temp this state te
  • 对 asp-route-parameter 使用隐藏字段值

    我在 PartialView 中有一个隐藏字段 其中包含我想要的值 jQuery 填充它 我需要在 foreach asp route parameter 中使用相同的值 div class js products list div
  • 通过Id查询Morphia

    我正在使用 Morphia MongoDB 的 Pojo 映射器 我发现一项在我看来应该非常简单的任务很困难 通过 id 获取对象 我能够找到集合中的所有对象 但无法弄清楚使用从列表中获得的 id 进行查询的简单任务 我实际上是在谈论 Ob
  • 如何保护PHP中的配置文件?

    我正在开发一个 PHP 项目 为其他程序员开发模板引擎 这个想法很简单 将有一个包含模板的模板文件夹和一个包含页面的页面文件夹 php 获取模板并使用当前 url 将页面插入其中 几年前我在没有面向对象的情况下完成了这个项目 但现在我正在尝
  • InvalidOperationException:类型“System.Linq.Queryable”上的方法“Where”与提供的参数不兼容

    下面的代码已更新并且可以正常工作 LinqPad 有动态 OrderBy 示例 我想做的只是简单地对此示例应用 Where 而不是 OrderBy 这是我的代码 IQueryable query from p in Purchases wh
  • 将 csv 文件读入结构数组

    我开始用C编写代码 我的代码如下 include
  • 在 Google 地图之外保存地图实例

    我制作了一个谷歌地图 API HTML 脚本 当用户单击地图时 它会创建标记 我还集成了 Google 登录功能 因此用户是独一无二的并且拥有个人资料 我现在想要做到这一点 以便用户可以在他们想要的位置上创建标记 然后保存地图 以便他们稍后