javascript - Django - 如何将 "Google Maps Polygon"保存到模型?

标签 javascript python django google-maps polygon

我想在 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/

相关文章:

javascript - `document.getElementsByClassName` 的结果没有定义像 `map` 这样的数组方法,即使它是一个数组

javascript - 解决 index.js 内的 'eslint' 错误 - Angular 5

python - 如何在不使用 pip 的情况下在 Heroku 中安装 Python 包?

django - 添加模型字段后如何解决 "ProgrammingError: Column does not exist"

Django Rest Framework 所有者权限

JavaScript:使用 jasmine 进行 toLocaleString() 测试

javascript - 在 Telerik MVC 网格中展开/折叠 DetailView

python - 通过 SWIG 从 Python 中的 C 函数返回结构数据类型

Python:pip 尝试安装到/bin 目录

Python/Django : Cannot import GeoIP