Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在表单提交中对地址进行地理编码?

在表单提交中对地址进行地理编码?
EN

Stack Overflow用户
提问于 2010-05-02 21:16:57
回答 5查看 5.9K关注 0票数 8

试图让我的大脑围绕django表单和django的做事方式。我想创建一个基本的网页表单,允许用户输入一个地址,并将该地址地理编码并保存到数据库中。

我创建了一个位置模型:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Location(models.Model):
    address = models.CharField(max_length=200)
    city = models.CharField(max_length=100)
    state = models.CharField(max_length=100, null=True)
    postal_code = models.CharField(max_length=100, null=True)
    country = models.CharField(max_length=100)
    latitude = models.DecimalField(max_digits=18, decimal_places=10, null=True)
    longitude = models.DecimalField(max_digits=18, decimal_places=10, null=True)

并定义了一个表单:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class LocationForm(forms.ModelForm):
    class Meta:
        model = models.Location
        exclude = ('latitude','longitude')

在我的视图中,我使用form.save()来保存表单。这是可行的,并将地址保存到数据库。

我创建了一个模块来对地址进行地理编码。我不确定django做事情的方式是什么,但在我看来,在保存表单之前,我需要对地址进行地理编码,并设置经度和经度。保存前如何设置经纬度?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-05-02 21:25:31

您可以覆盖模型的save方法。我在保存之前对数据进行了地理编码。这是使用googleapi,但可以相应地进行修改。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import urllib

def save(self):
    location = "%s, %s, %s, %s" % (self.address, self.city, self.state, self.zip)

    if not self.latitude or not self.longitude:
        latlng = self.geocode(location)
        latlng = latlng.split(',')
        self.latitude = latlng[0]
        self.longitude = latlng[1]

    super(Marker, self).save()

def geocode(self, location):
    output = "csv"
    location = urllib.quote_plus(location)
    request = "http://maps.google.com/maps/geo?q=%s&output=%s&key=%s" % (location, output, settings.GOOGLE_API_KEY)
    data = urllib.urlopen(request).read()
    dlist = data.split(',')
    if dlist[0] == '200':
        return "%s,%s" % (dlist[2], dlist[3])
    else:
        return ','
票数 8
EN

Stack Overflow用户

发布于 2013-11-14 03:07:57

谷歌地图应用编程接口v3的更新:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import json
import urllib.parse
from decimal import Decimal

def save(self):
    if not self.lat or not self.lng:
        self.lat, self.lng = self.geocode(self.address)

    super(Location, self).save()

def geocode(self, address):
    address = urllib.parse.quote_plus(address)
    maps_api_url = "?".join([
        "http://maps.googleapis.com/maps/api/geocode/json",
        urllib.parse.urlencode({"address": address, "sensor": False})
    ])
    response = urllib.urlopen(maps_api_url)
    data = json.loads(response.read().decode('utf8'))

    if data['status'] == 'OK':
        lat = data['results'][0]['geometry']['location']['lat']
        lng = data['results'][0]['geometry']['location']['lng']
        return Decimal(lat), Decimal(lng)
票数 3
EN

Stack Overflow用户

发布于 2010-05-02 21:38:23

您也可以使用django.db.models.signals.pre_save-signal!

可以在http://docs.djangoproject.com/en/dev/topics/signals/上查看Django的信号文档。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2755027

复制
相关文章
javascript reduce
reduce() 方法对累加器和数组中的每个元素(从左到右)应用一个函数,将其减少为单个值。
chuchur
2022/10/25
4960
关于 JavaScript 中的 reduce() 方法
reduce() 方法对数组中的每个元素执行一个升序执行的 reducer 函数,并将结果汇总为单个返回值
Leophen
2020/03/18
1.4K0
小程序点击跳转页面并传入一个对象及接受
传参data-item="{{item}}" <view wx:for="{{ list }}" wx:key="{{ index }}" catchtap="onclick" data-item="{{item}}"> <image src="{{ item.images.small }}"></image> <text>{{ item.title }}</text> </view> 点击事件 onclick(e){ let item =e.currentTarget.datas
江一铭
2022/06/16
3580
JavaScript 添加一个元素标签[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/152091.html原文链接:https://javaforall.cn
全栈程序员站长
2022/06/25
5590
JavaScript 添加一个元素标签[通俗易懂]
深入理解JavaScript函数式编程
什么是函数式编程(Functional Programming, FP):FP 是编程范式之一.(还有面向过程编程、面向对象编程)
用户3045442
2020/07/31
4.3K0
深入理解JavaScript函数式编程
前端优化--使用JavaScript添加交互
JavaScript 允许我们修改网页的方方面面:内容、样式以及它如何响应用户交互。 不过,JavaScript 也会阻止 DOM 构建和延缓网页渲染。 为了实现最佳性能,可以让您的 JavaScript 异步执行,并去除关键渲染路径中任何不必要的 JavaScript。
奋飛
2021/08/30
1.8K0
前端优化--使用JavaScript添加交互
翻译连载 |《你不知道的JS》姊妹篇 |《JavaScript 轻量级函数式编程》- 第 8 章:列表操作
原文地址:Functional-Light-JS 原文作者:Kyle Simpson-《You-Dont-Know-JS》作者 第 8 章:列表操作 你是否还沉迷于上一节介绍的闭包/对象之中?欢迎回来
iKcamp
2018/01/04
3.5K0
翻译连载 |《你不知道的JS》姊妹篇 |《JavaScript 轻量级函数式编程》- 第 8 章:列表操作
前端优化--使用JavaScript添加交互
JavaScript 允许我们修改网页的方方面面:内容、样式以及它如何响应用户交互。 不过,JavaScript 也会阻止 DOM 构建和延缓网页渲染。 为了实现最佳性能,可以让您的 JavaScript 异步执行,并去除关键渲染路径中任何不必要的 JavaScript。
奋飛
2020/05/28
1.8K0
【说站】javascript函子是什么
1、作为特殊容器通过普通对象实现,该对象具有map方法,map方法可以运行函数处理值(变形关系)。
很酷的站长
2022/11/23
2440
【说站】javascript函子是什么
JavaScript函数式编程之函子
函子是一个特殊的容器,通过一个普通对象来实现,该对象具有map方法,map方法可以运行一个函数对值进行处理(变形关系),容器包含值和值变形关系(这个变形关系就是函数)。函数式编程中解决副作用的存在
开水泡饭
2022/12/26
1.2K0
python使用reduce,lambd
>>> l = range(1,101) #定义l的数值范围1-100 >>> reduce(lambda x,y:x+y,l) #l数字传递给lamdba表达式,并reduce递归运算。 5050
py3study
2020/01/13
3200
父组件调用子组件方法并传入值
# 父组件调用子组件方法并传入值 通过ref引用调用子组件内的方法并传入参数 父组件: <子组件标签 ref="refName"></子组件标签> methods: { fnX(x) { this.$refs.refName.fnY(x) // 调用子组件方法并传入值 } } 子组件: methods: { fnY(x) { this.x = x } } }
小小杰啊
2022/12/21
1.2K0
reduce方法的使用
认识reduce 语法:arr.reduce(callbackFn,[initialValue]) callbackFn : 一个 “reducer” 函数,包含四个参数: previousValue:上一次调用 callbackFn 时的返回值。在第一次调用时,若指定了初始值 initialValue,其值则为 initialValue,否则为数组索引为 0 的元素 array[0] currentValue:数组中正在处理的元素。在第一次调用时,若指定了初始值 initialValue,其值则
且陶陶
2023/04/12
4710
reduce方法的使用
使用 JavaScript 创建并下载文件
本文将介绍如何使用 JavaScript 创建文件,并自动/手动将文件下载。这在导出原始数据时会比较方便。
零式的天空
2022/03/28
1.8K0
使用 JavaScript 创建并下载文件
sendfile函數的使用[通俗易懂]
sendfile函數linux內核新加的函數,可以使得網絡傳輸文件時用户层无需分配缓冲区给将要传输的文件,从而能够节约内存,并直接调用系统调用
全栈程序员站长
2022/09/05
5240
13个JavaScript数组reduce的实例方法
对比map、 forEach、 filter 等数组方法,reduce比它们更强。
前端达人
2021/05/11
7800
使用jquary和javascript动态添加tr
首先拿到json解析过的json对象,比如,var obj = eval(data);因为data可能存放的是对象, 这里就假设是对象。根据对象里面的属性,添加几个td。
微醺
2019/01/17
2.1K0
[译] 什么是函数式编程
作为一名开发者, 自然是想要写出优雅的, 易于维护的, 可扩展的, 可以预测的代码. 函数式编程(Functional Programming / FP)的原则能够很好的命中这些需求.
腾讯IVWEB团队
2020/06/28
1.6K0
iOS | 动态获取字符串宽高并添加约束
在 iOS 实际编码过程中,我们可能会需要通过代码动态的向某个 View 视图中添加 UILabel, 此时,我们必须手动的为这些 UILabel 对象添加约束条件,否则,这些 UILabel 将会因为没有约束条件而无法显示。
CnPeng
2021/02/03
7370
【JS】446- 你不知道的 map
如果你听说过Ramda,它也提供了和Array.prototype.map方法类似的map方法。
pingan8787
2019/12/24
1.4K0
【JS】446- 你不知道的 map

相似问题

JavaScript传入一个函数来映射();

50

使用Javascript Reduce添加一个属性并乘以另一个属性

19

传入键并返回对象javascript

211

javascript:使用reduce对某些字段进行集体添加?

20

构建HTML,将其作为XML传入,并使用javascript?

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文