我想在 Googlemaps 上创建一个多边形,应使用 Django/GeoDjango 将其发布到我的 postgres 数据库。
用户通过 Google map 选择他们的区域,多边形应该被保存。 我想对这些多边形进行计算。 另一方面,其他多边形应该显示在 map 上。
我想,我必须使用ajax/jquery,但是,是的,我是一个django菜鸟。 :D
(抱歉我的英语不好)
型号
from django.contrib.gis.db import models
class Area(models.Model):
owner = models.ForeignKey(User)
poly = models.PolygonField()
objects = models.GeoManager()
Views.py
@csrf_protect
def create_area(request):
if request.user.is_authenticated():
return render(request, 'basics/map_claim.html')
GoogleMaps.js
<script>
var map;
var marker;
var polygon;
var myCenter=new google.maps.LatLng(51.508742,-0.120850);
var geocoder;
var infowindow;
var polypoints=[];
function initialize() {
geocoder = new google.maps.Geocoder()
var mapProp = {
center:myCenter,
zoom:2,
mapTypeId:google.maps.MapTypeId.ROADMAP,
mapTypeControl: false,
panControl:false,
rotateControl:false,
mapTypeControl:true,
streetViewControl: false
};
marker=null;
map = new google.maps.Map(document.getElementById("map-container"),mapProp);
google.maps.event.addListener(map, 'click', function(event) {
polypoints.push(event.latLng);
placePolygon();
console.log(polypoints);
});
}
function placePolygon(){
if(polygon){
polygon.setPaths(polypoints);
}
else {
polygon=new google.maps.Polygon({
paths: polypoints,
strokeColor: '#FF0000',
strokeOpacity: 0.8,
strokeWeight: 3,
fillColor: '#FF0000',
fillOpacity: 0.35,
editable: true
});
} polygon.setMap(map);
}
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition);
} else {
x.innerHTML = "Geolocation is not supported";
y.innerHTML = "by this browser.";
}
}
function showPosition(position) {
var latlng={lat: parseFloat(position.coords.latitude), lng: parseFloat(position.coords.longitude)};
placeMarker(latlng);
}
function placeMarker(location) {
if(marker){
infowindow.close();
marker.setPosition(location);
geocoder.geocode({'location': location}, function(results, status){
infowindow.setContent(results[0].formatted_address);
infowindow.open(map,marker);
})
}
else{
marker = new google.maps.Marker({
position: location,
map: map,
});
geocoder.geocode({'location': location}, function(results, status){
infowindow = new google.maps.InfoWindow({content: results[0].formatted_address});
infowindow.open(map,marker);
})
map.setZoom(6);
}
map.setCenter(marker.getPosition());
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
<script type='text/javascript'>
$('#location-map-modal').on('shown.bs.modal', function(e) {
initialize();
});
</script>
谢谢你所做的一切。 :/
最佳答案
我不是 100% 明白你在问什么,但典型的方法是这样的:
area = Area()
area.owner = request.User
area.poly = polygon_data # Assumes you have a variable set to your polygon data
area.objects = object_data # Assumes you have a variable set to your geo object data
area.save()
这应该创建实例并将其保存到您的数据库中。您可以通过以下方式检查它是否已保存:
if not area.ID:
# Oh noes, didn't save.
有大量关于 django ORM 如何工作的文档。我建议您阅读其中的一些内容。
关于javascript - Django - 如何将 "Google Maps Polygon"保存到模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37928101/