Por: Leonardo Orozco
Un sistema de información geográfica (también conocido con los acrónimos SIG en español o GIS en inglés) es un conjunto de herramientas que integra y relaciona diversos componentes (usuarios, hardware, software, procesos) que permiten la organización, almacenamiento, manipulación, análisis y modelización de grandes cantidades de datos procedentes del mundo real que están vinculados a una referencia espacial.
Django es un framework para aplicaciones web gratuito y open source, escrito en Python. Es un WEB framework - un conjunto de componentes que te ayudan a desarrollar sitios web más fácil y rápidamente.
#from django.db import models
from django.contrib.gis.db import models
# Create your models here.
class Post(models.Model):
name = models.CharField(max_length=50)
point = models.PointField(srid=4326)
class Meta:
verbose_name = "data"
verbose_name_plural = "datas"
class Post2(models.Model):
name = models.CharField(max_length=50)
point = models.LineStringField(srid=4326)
class Meta:
verbose_name = "data2"
verbose_name_plural = "datas2"
#forms.py
from django.contrib.gis import forms
class GeoForm(forms.Form):
name = forms.CharField()
point = forms.PointField(widget=forms.OSMWidget(attrs={'map_width': 800,
'map_height': 500}))
# html
<!DOCTYPE html>
<html>
<head>
<title>Forma</title>
{{ form.media }}
</head>
<body>
<form method="post">
{% csrf_token %}
{{form.as_p}}
<p>
<button type="submit">Guardar</button>
</p>
</form>
</body>
</html>
from django.contrib.gis.measure import D
from geo.models import Post
# comparando si un objecto esta a una distancia
Post.objects.filter(point__distance_lte=('Point(1 1)', D(m=5)))
Post.objects.annotate(distance=Distance('point', 'Point(1 1)'))
#distancia entre objectos
from django.contrib.gis.db.models.functions import Distance
Post.objects.annotate(distance=Distance("point", p.point)).values("distance")
#una geometria esta contenida en otra
Post.objects.filter(point__contained= p.point)
email: leonardoorozcop@gmail.com
Github: leonardoo
Twitter: @leon4rdoo_o