簡體   English   中英

Django floppyforms從(lat,lon)設置PointField,反之亦然

[英]Django floppyforms setting PointField from (lat,lon) and vice versa

我試圖使用軟盤進行一些更改:

models.py:

class LocationPoint(models.Model):
    title = models.CharField(max_length=30, null=False, blank=False)
    radius = models.DecimalField(max_digits=5, decimal_places=2, null=False, blank=False)
    point = models.PointField(srid=4326, null=False, blank=False)
    objects = models.GeoManager()

views.py:

def location_point_new(request):
    if request.method == "POST":
        form = LocationPointForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('ui:population-constraint-add')
    else:
        form = LocationPointForm()

    template = 'api/location_point_template.html'
    context = RequestContext(request, {'form': form})
    return render_to_response(template, context)

forms.py:

class GMapPointWidget(floppyforms.gis.BaseGMapWidget, floppyforms.gis.PointWidget):
    google_maps_api_key = 'my-key'


class LocationPointForm(forms.ModelForm):
    latitude = forms.DecimalField(
        min_value=-90,
        max_value=90,
        required=True,
    )
    longitude = forms.DecimalField(
        min_value=-180,
        max_value=180,
        required=True,
    )

    class Meta:
        model = LocationPoint
        exclude = []
        widgets = {'point': GMapPointWidget(attrs={'map_width': 1000,
                                               'map_height': 500,
                                               'is_point': True,
                                               'mouse_position': True,
                                               'point_zoom': 1})}

    def __init__(self, *args, **kwargs):
        super(LocationPointForm, self).__init__(*args, **kwargs)
        if args:  # If args exist
            data = args[0]
            if data['latitude'] and data['longitude']:  # If lat/lng exist
                latitude = float(data['latitude'])
                longitude = float(data['longitude'])
                data['point'] = Point(longitude, latitude)  # Set PointField
        try:
            coordinates = kwargs['instance'].point.tuple  # If PointField exists
            initial = kwargs.get('initial', {})
            initial['latitude'] = coordinates[0]  # Set Latitude from coordinates
            initial['longitude'] = coordinates[1]  # Set Longitude from coordinates
            kwargs['initial'] = initial
        except (KeyError, AttributeError):
            pass

template.html

{% extends "base.html" %}
{% load staticfiles %}
{% block content %}
{{ form.media }}
<div class="container" xmlns="http://www.w3.org/1999/html" xmlns="http://www.w3.org/1999/html">
    <div class="page-header">
        <h1>Location Point</h1>
    </div>
    <form role="form" class="form-inline" action="" method="post" enctype="multipart/form-data" novalidate>
        {% csrf_token %}
        <div class="dl-horizontal">
             <a href="{% url 'ui:population-constraint-add' %}">
                 <button type="button" class="btn btn-info">Back</button>
             </a>
       </div>
       <br/>
       <br/>
       {{ form.as_p }}
       <div class="dl-horizontal">
           <button type="submit" class="btn btn-success">Save</button>
       </div>
       <br/>
       <br/>
   </form>
</div>
{% endblock %}

在此處輸入圖片說明

此代碼存在三個問題:

  1. 默認縮放太近了... GWidget的小部件設置point_zoom不執行任何操作。
  2. 如您在上面的屏幕截圖中所見,我試圖將點設置為經緯度(31.0461,34.8516)的 以色列 ,但該點放置在海洋中...為什么? 是否有不同的緯度計算?
  3. 我該怎么做,我想在地圖上設定一個點,然后在框中看到經緯度數據?

我希望這對您有幫助,根據floppyforms文檔

  1. 在html中嘗試設置:
 {% block options %} options['point_zoom'] = 9; options['default_zoom'] = 2; {% endblock %} 
  1. 您可以嘗試將Widget屬性:“ map_srid”更改為900913(類似於lat lon的google),默認值為4326,它看起來應該像這樣:
 class GMapPointWidget(floppyforms.gis.BaseGMapWidget, floppyforms.gis.PointWidget): map_srid = 900913 # Use the google projection 

您使用來重寫汽車

from django.contrib.gis.db.models import PointField
p = Point(
        85.3240, 
        27.7172,
        geography=True, 
        # srid=4326 - default_value
)

https://docs.djangoproject.com/en/2.1/ref/contrib/gis/model-api/#pointfield

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM