2016-06-20 33 views
1

我想在Googlemaps上創建一個多邊形,這個多邊形應該使用Django/GeoDjango發佈到我的postgres數據庫中。Django - 如何將「Google Maps Polygon」保存爲模型?

用戶通過谷歌地圖選擇他們的區域,應該保存多邊形。 我想對這些多邊形進行計算。另一方面,其他多邊形應顯示在地圖上。

我想,我必須使用ajax/jquery,但是,是的,我是一個django noob。 :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> 
 

 

 
\t var map; 
 
\t var marker; 
 
    var polygon; 
 
\t var myCenter=new google.maps.LatLng(51.508742,-0.120850); 
 
\t var geocoder; 
 
\t var infowindow; 
 
    var polypoints=[]; 
 

 

 
\t function initialize() { 
 
    \t geocoder = new google.maps.Geocoder() 
 
\t \t \t var mapProp = { 
 
    \t \t \t center:myCenter, 
 
    \t \t \t zoom:2, 
 
    \t \t \t mapTypeId:google.maps.MapTypeId.ROADMAP, 
 
\t \t \t \t mapTypeControl: false, 
 
     panControl:false, 
 
     rotateControl:false, 
 
\t \t \t \t mapTypeControl:true, 
 
     streetViewControl: false 
 
    \t \t }; 
 
    \t \t marker=null; 
 

 
    \t \t map = new google.maps.Map(document.getElementById("map-container"),mapProp); 
 
    \t \t google.maps.event.addListener(map, 'click', function(event) { 
 
      polypoints.push(event.latLng); 
 
      placePolygon(); 
 
      console.log(polypoints); 
 
    \t \t }); 
 
\t } 
 

 

 
    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); 
 
    } 
 

 
\t function getLocation() { 
 
    \t if (navigator.geolocation) { 
 
    \t  navigator.geolocation.getCurrentPosition(showPosition); 
 
    \t } else { 
 
    \t  x.innerHTML = "Geolocation is not supported"; 
 
    \t  y.innerHTML = "by this browser."; 
 
    \t } 
 
\t } 
 

 
\t function showPosition(position) { 
 
    \t var latlng={lat: parseFloat(position.coords.latitude), lng: parseFloat(position.coords.longitude)}; 
 
    \t placeMarker(latlng); 
 
\t } 
 

 

 
\t function placeMarker(location) { 
 
\t  if(marker){ 
 
\t   infowindow.close(); 
 
\t   marker.setPosition(location); 
 
\t   geocoder.geocode({'location': location}, function(results, status){ 
 
\t    infowindow.setContent(results[0].formatted_address); 
 
\t    infowindow.open(map,marker); 
 
\t   }) 
 
\t  } 
 
\t  else{ 
 
\t   marker = new google.maps.Marker({ 
 
\t   position: location, 
 
\t   map: map, 
 
\t   }); 
 
\t   geocoder.geocode({'location': location}, function(results, status){ 
 
\t    infowindow = new google.maps.InfoWindow({content: results[0].formatted_address}); 
 
\t    infowindow.open(map,marker); 
 
\t   }) 
 
\t   \t map.setZoom(6); 
 
\t  } 
 
\t \t map.setCenter(marker.getPosition()); 
 
\t } 
 
\t google.maps.event.addDomListener(window, 'load', initialize); 
 

 
</script> 
 
<script type='text/javascript'> 
 
    \t $('#location-map-modal').on('shown.bs.modal', function(e) { 
 
     initialize(); 
 
    }); 
 

 
</script>

謝謝你的一切。 :/

回答

0

我不是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如何在那裏工作的TON文檔。我建議讀一些。

+0

好的。埃姆。我怎樣才能將這個googlemaps-多邊形轉換爲geodjango多邊形? – Raider

+0

現在有一個我無法回答,但您可能會在這裏找到一些有用的信息:http://gis.stackexchange.com/questions/98074/how-to-use-google-maps-projection-with-geodjango-postgis 谷歌搜索也可能讓你在那個答案。 – Hickeroar

+0

入侵者,你好!我需要GMap的幫助..請通過skype - denism2009與我聯繫...提前感謝!!! – Dennis