如何将 Geodjango 与 Google Maps API 3 集成?

2024-02-17

我有一个包含多个字段的 geodjango 查询集,但只想使用user_name and location(一个点字段)我想将其用作谷歌地图 API 3 中的标记。

请耐心等待,因为我不懂 JavaScript,而且我有一系列问题。
将此视为新手的概念性头脑风暴:

  1. 我的 SO 搜索表明我需要序列化查询集对象 到 JSON。我使用内置的序列化器模块来转换为 JSON。
    我认为 JSON 对象被转换为views.py(让我们 叫它json_data)。这些 JSON 对象是否存储在 PostGIS 数据库中?这不是多余的吗?

  2. 此外,我如何在map.js(谷歌地图 API 3) JavaScript 文件?
    我想要(导入?链接?)JSON 对象将它们显示为位置标记。

  3. 我想知道如何声明和迭代 javascript 变量locations.

For var(i=0;i< locations.length;i++){[
[json_data.user_name, json_data.point],
]

var map = new google.maps.Map(document.getElementById('map'), {
  center: new google.maps.LatLng(49.279504, -123.1162),
  zoom: 14,
  mapTypeId: google.maps.MapTypeId.ROADMAP
});
var infowindow = new google.maps.InfoWindow();
var marker, i;
for (i = 0; i < locations.length; i++) {
  marker = new google.maps.Marker({
    position: new google.maps.LatLng(locations[i][1], locations[i][2]),
    map: map,
    icon: 'http://maps.google.com/mapfiles/ms/icons/blue-dot.png'
  });
  google.maps.event.addListener(marker, 'click', (function(marker, i) {
    return function() {
      infowindow.setContent(locations[i][0]);
      infowindow.open(map, marker);
    }
  })(marker, i));
}

如果我用不必要的复杂方式来完成一项简单的任务,请指导我。


TL;DR

  1. 不,您所做的并不是多余的,并且这些答案不会将任何内容写入数据库。
  2. 你需要做一个getJSON()或对 API 端点的类似调用来访问数据。
  3. 您可以在第二步的调用中执行此操作并将其声明为列表。

您的想法几乎是正确的,但还有改进的空间(因此下面有长答案)。


Answer:

前段时间我读到一篇关于使用 geodjango 和 google 地图构建 GIS 应用程序的非常好的入门教程 https://github.com/invisibleroads/invisibleroads-tutorials/blob/master/geodjango-googlemaps-build.rst#view-waypoints。阅读它,它会给你一个很好的起点。

在您阅读完本文后,我们将遵循一种稍微不同的方式,为您的前端留出更多的空间(例如使用反应或任何想到的)。

后端:

  1. 创建一个视图来检索您想要的信息(user_name, location) 作为 JSON,使用values() https://docs.djangoproject.com/en/1.11/ref/models/querysets/#django.db.models.query.QuerySet.valuesqueryset 方法返回字典列表。
    由于我们必须对列表进行 JSONify,因此我们将使用JsonResponse https://docs.djangoproject.com/en/1.10/ref/request-response/#jsonresponse-objects我们将其标记为不安全:

    from django.http import JsonResponse
    
    def my_view(request):
        resp = MyModel.objects.all().values('user_name', 'location')
        return JsonResponse(list(resp), safe=False)
    
  2. 添加端点以访问该视图urls.py:

    urlpatterns = [
        ...
        url(r'^my_endpoint/$', my_view, name='my_endpoint'),
        ...
    ]
    

    现在每当我们访问my_endpoint/我们将得到每个对象的 JSON 表示user_name and location在我们的数据库中,它看起来像这样:

    [
      {user_name: a_user, location: [lat, lng]},
      {user_name: another_user, location: [lat, lng]},
      ...
    ]
    

现在转向前端:

  1. Make a getJSON() or an ajax()或任何其他类型的 API 调用,同时创建一个标记列表(接近 @MoshFeu 建议的内容):

    let map = new google.maps.Map(document.getElementById('map'), {
        center: new google.maps.LatLng(49.279504, -123.1162),
        zoom: 14,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    });
    
    let markers = [];
    
    $.getJSON( "my_base_url/my_endpoint", function(data) {
        $.each(data, function() {
            markers.push(
                new google.maps.Marker({
                    position: {
                        lat: data['location'][0], 
                        lng: data['location'][1]
                    },
                    map: map,
                    icon: 'http://maps.google.com/mapfiles/ms/icons/blue-dot.png'
                })     
            );
        });
    });
    ...
    

我们已经完成了!

您不需要对数据进行任何特殊的序列化。
您可以从您可以想象的任何类型的前端查询数据,这为您提供了设计自由。

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

如何将 Geodjango 与 Google Maps API 3 集成? 的相关文章

  • 如何使用 Mercurial 将文件夹与现有 Heroku 应用程序链接

    我在 Bitbucket 上有一个现有的 Django 应用程序 我能够部署到 Herokuhg git https stackoverflow com q 9591380 343834 每当我想在应用程序文件夹中运行一些 heroku 命
  • 鼠标移动时画布拖动

    我正在尝试构建一个可以使用鼠标移动拖动的画布 我做了一些我无法理解的错误 因为一开始似乎有效 然后出现了一个增量错误 使画布移动得太快 考虑以下代码 window onload function var canvas document ge
  • 用更好的模式替换开关(Javascript)

    我必须升级我的应用程序以根据用户类型和角色属性显示页面 目前 我使用一个简单的 switch 语句来根据用户类型来执行此操作 例如 switch type case a return CONSTANT ONE case b return C
  • ASP.NET 验证控件和 Javascript 确认框

    我有一个使用 NET 服务器端输入验证控件的页面 此页面还有一个 javascript 确认框 在提交表单时会触发该确认框 当前 当选择 提交 按钮时 会出现 javascript 确认框 一旦确认 就会触发 ASP NET 服务器端验证控
  • Django 本身支持迁移吗

    我听说所有新的 Web 框架 如 ROR Django 等 都遵循敏捷和 TDD 的一般原则 遵循敏捷和 TDD 的一部分是在从一个迭代到另一个迭代时制定自己的设计 这意味着模型及其架构将随着应用程序的不同版本而演变 我知道 ROR 本身支
  • 如何使用 Nextjs/React 将 JSON 对象导出到 Excel?

    我有一个检索 json 对象的端点 如下所示 data id 1 temaIndicador Indian codigo 001 observaciones Interactions Specialist tertiary Regional
  • Twitch API - 无法使用 PHP 获取身份验证令牌

    stackoverflow 的成员们大家好 我不是一个喜欢寻求帮助的人 但在这种情况下 我认为这是解决我的问题的唯一方法 谷歌并没有给我太大帮助 所以 我的问题 我想使用 Twitch API 获取一些数据 听起来很容易 我希望是这样 下面
  • 替换img路径jquery

    我正在尝试替换 jquery 中的 img 路径 注入远程页面 replaceexample com thumbs withexample com images 我已经尝试过这个 但似乎不起作用 img attr src replace t
  • 为什么Promise中的代码会同步执行? [复制]

    这个问题在这里已经有答案了 在我的项目中 我有一个很长时间运行的操作 所以我决定将其放入Promise因为我认为这样我就可以在里面的代码继续执行其他操作Promise正在跑步 调试的时候发现外面的代码Promise仅当里面的代码执行Prom
  • 为什么这个递归函数返回未定义?

    我正在尝试编写一个使用递归组合两个字符串的函数 我的代码如下 但我不知道为什么该函数返回未定义 特别是当我在基本情况下使用 console log 时 它不会打印未定义而是打印正确的值 var str3 function merge str
  • NodeJS - 将相对路径转换为绝对路径

    In my 文件系统我的工作目录在这里 C temp a b c d 在 b bb 下有文件 tmp txt C temp a b bb tmp txt 如果我想从工作目录转到该文件 我将使用以下路径 bb tmp txt 如果该文件不存在
  • 如何跨多个 React Redux 组件使用 requestAnimationFrame 实现游戏循环?

    努力思考最好的解决办法 我可以使用递归调用requestAnimationFrame有一个游戏循环 export interface Props name string points number onIncrement gt void o
  • 使用 eval 时不会受到 XSS 威胁

    我正在制作 不是现在 但我仍然对这个感到好奇 一款使用 HTML5 和 JS 的游戏 我想要的是人们可以插入自定义脚本 但要安全 function executeCustomJS code eval code bad 当然这段代码非常糟糕
  • 将默认搜索文本添加到搜索框 html

    我正在努力将 搜索 文本添加到搜索框 我正在努力实现 onfocus 消失文本 And onblur 重新出现文本 到目前为止 我已经实现了这一点 但我必须将其硬编码为 html eg
  • 为什么 console.log() polyfill 不使用 Function.apply()?

    我一直在看一些流行的console log 包装 填充 保罗 爱尔兰的 http paulirish com 2009 log a lightweight wrapper for consolelog 本阿尔曼的 http benalman
  • 如何让php页面从html页面接收ajax post

    我有一个非常简单的表单 其中有一个名字输入字段 我捕获了表单数据 并使用标准 jQuery 发布方法通过 ajax 将其传输到 PHP 页面 但是 我根本无法从 PHP 页面获得任何在服务器端捕获数据的响应 我不确定我做错了什么或缺少什么
  • 加载 Angular 库时,IE9 和 IE10 中出现 Angular JS“SCRIPT5007:预期对象”错误

    我正在开发一个 AngularJS 应用程序 该应用程序应在 Firefox IE 9 和 IE 10 上运行 我使用最新版本的 angularjs 库 现在是 1 3 15 服务器端是在JavaEE平台上用Java编写的 服务器运行在Gl
  • 如何得知客户端从服务器的下载速度?

    根据客户的下载速度 我想以低质量或高质量显示视频 任何 Javascript 或 C 解决方案都是可以接受的 Thanks 没有任何办法可以确定 您只能测量向客户端发送数据的速度 如果没有来自客户端的任何类型的输入来表明其获取信息的速度 您
  • 从json中获取所有子节点

    我有以下 json var source k 01 k 02 children k 05 k 06 children k ABC k PQR k 07 k 03 我希望能够指定 k 的值并取回所有孩子 以及孙
  • 如何强制下载图片?

    我的页面上有一个动态生成的图像 如下所示 img src 我不想告诉我的用户右键单击图像并点击保存 而是想公开一个下载链接 单击该链接将提示下载图像 如何实现这一目标 最初我在 js 中尝试这样做 var path my image att

随机推荐

  • 使用 AutoMapper 映射字典

    鉴于这些类 我如何映射它们的字典 public class TestClass public string Name get set public class TestClassDto public string Name get set
  • Spring boot - 不是托管类型

    我使用 Spring boot JPA 并在启动服务时遇到问题 Caused by java lang IllegalArgumentException Not an managed type class com nervytech dia
  • sqlite3,IntegrityError:插入值时唯一约束失败

    为了防止我的数据库变得太大 我希望 sqlite 只插入尚未插入的值 我做了一些搜索 并认为最好的方法是使用 UNIQUE 约束 在我看来 插入不唯一的值时 sqlite 会崩溃 如何避免此错误并继续下一次提交 下面是一些相关代码 sql
  • Android 的自签名证书和 Loopj

    我正在尝试使用loopj http loopj com android async http制作async HTTP要求 效果很好 除了当我尝试使用自签名证书访问 https 网站时 我明白了 javax net ssl SSLPeerUn
  • 无法从 ArrayList 中删除[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions import java util c
  • .git/branches 文件夹的用途是什么?

    我一直认为 git branches目录用于遗留目的 并且 git 曾经使用该目录 但现在使用 git refs目录代替 这是真的 如果没有 那么该目录的目的是什么 因为我从未见过它被使用或引用 EDIT 我正在使用 git 版本 1 7
  • Cassandra静态列设计[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 静态列如何在 cassandra 内部存储 有人可以发布一个示例来讨论 cassandra 中静态列的
  • simd_float4x4 列

    我想平移平面而不旋转图像 出于某种原因 我的图像正在旋转 var translation matrix identity float4x4 translation colum 0 2 let transform simd mul curre
  • 合并排序初学者问题

    我现在有一个关于归并排序算法的问题 因为在原始算法中 将要排序的列表分为两个子列表并递归排序 现在我想将长度为 n 的列表分为 3 个长度为 n 3 的子列表 然后对这三个子列表进行递归排序 然后合并 怎么样 我只是简单地修改了原始算法 将
  • 如何在react-google-maps中弯曲折线?

    我是 React 新手 一直在使用 React google maps 包 我正在尝试弯曲连接两个地方的折线 在浏览完文档后 我尝试将曲线折线函数合并到 可编辑 属性下 这是弯曲折线的函数 var map var curvature 0 4
  • R: lapply 函数 - 跳过当前函数循环

    我正在对多个文件的列表使用 lapply 函数 有没有一种方法可以让我跳过当前文件上的函数而不返回任何内容 而直接跳到文件列表中的下一个文件 准确地说 我有一个 if 语句来检查条件 如果该语句返回 FALSE 我想跳到下一个文件 lapp
  • iTunes Connect:您的应用程序“*”(Apple ID:*)有一个或多个问题 - 电子邮件发送到整个用户列表、所有试飞用户,无论是什么应用程序

    今天 我通过 Xcode 向应用程序商店提交了一个新的测试应用程序 以便在 ItunesConnect 中查看 应用程序提交成功 但二进制文件在大约一分钟后被 ITC 拒绝 PNG 中具有 Alpha 通道的 AppIcons 存在问题 我
  • 如何在平面文件连接管理器上重新配置列信息?

    我有一个正在从平面文件读取数据的平面文件源 我们最近在此平面文件中添加了一个新列 平面文件数据被插入到数据库表中 为了适应目标组件中的新字段 我使用了ALTER TABLE语句将新列添加到表中 这是我所做的唯一改变 平面文件和目标组件之间的
  • 如何在sql server中获取分隔符之前的第一个值

    在其中一列中 我得到 2 个值 它们之间有一个分隔符 如何提取两个值 我有类似这个专栏的东西TRN02 is 115679 5757 我需要再次将分隔符之前和分隔符之后的值分成两个单独的列 有人可以帮我解决这个问题吗 您可以使用SUBSTR
  • 如何使用 Laravel 4.1 在字符串中查找#hashtags?

    我目前正在尝试过滤输入字符串以查找用户希望与其照片一起显示的单个主题标签 但是 我目前在数据库中插入的内容不正确 最好的情况是每个主题标签都保存在带有照片 ID 的新数据库行中 但是 我真的不知道该怎么做才能实现这一目标 hashtag n
  • 如何从带有 Array 属性的 Action 方法返回 Json?

    我正在尝试从操作方法返回一些 json 数据 我有一个员工对象 如下所示 public class Employee public int EmployeeID get set public string FirstName get set
  • JQuery UI 模式对话框使用 100% CPU

    当我在 IE8 中打开模态 JQuery 对话框时 我的 CPU 使用率达到 100 不 实际上是 50 但这是一个核心的 100 如果我破坏开发人员工具 似乎会触发很多调整大小事件 我不进行任何自愿调整大小 有其他人遇到过这个问题并且知道
  • 超时功能

    我想编写一个代码 要求输入用户名 但时间限制为 15 秒 如果用户超出限制并且无法输入名称 或任何字符串 则代码将终止并显示 超时 按摩 否则应保存名称并显示 谢谢 按摩 我曾尝试过这样的操作 但它是错误的并且不起作用 请给我一个解决方案
  • Xt 错误:如果使用默认显示,则无法打开显示

    Overview 我正在尝试让 XQuartz 在 OSX 上工作 这样我就可以通过 Docker 进行 X11 转发 我正在跟进此处的说明 https learning continuous deployment github io do
  • 如何将 Geodjango 与 Google Maps API 3 集成?

    我有一个包含多个字段的 geodjango 查询集 但只想使用user name and location 一个点字段 我想将其用作谷歌地图 API 3 中的标记 请耐心等待 因为我不懂 JavaScript 而且我有一系列问题 将此视为新