2010-11-03 38 views
7

Tôi đang cố định vị trí người dùng thông qua địa chỉ IP của họ và sau đó hiển thị chúng trong một bản đồ google. những gì sẽ là cách tiếp cận tốt nhất cho mục đích này. Hoặc là có cách nào khác để có được người dùng lat/long và hiển thị em trong một bản đồ google thay vì địa chỉ IP.cố gắng để có được vị trí người dùng thông qua IP

+2

em sử dụng Django 1.0 và bản đồ google API – MajorGeek

Trả lời

8

Câu hỏi của bạn thực sự là 2 câu hỏi. Phần đầu tiên nhận được lat, lng từ một địa chỉ ip. AFAIK, bản đồ google api không cung cấp cho định vị địa lý dựa trên IP. Do đó để hiển thị địa chỉ IP trên bản đồ google, trước tiên bạn phải có được vị trí địa lý (hoặc là địa chỉ, hoặc là lat, lng). Có nhiều API trả phí và chưa thanh toán khác nhau trên web cho phép bạn thực hiện việc này và bản thân django đi kèm với một tiện ích cho việc này. Tài liệu là here. trường hợp sử dụng của bạn sẽ được thực hiện như:

from django.contrib.gis.utils import GeoIP 
g = GeoIP() 
lat,lng = g.lat_lon(user_ip) 

hoặc

address = g.city(user_ip) 

LƯU Ý: Tiện ích này, hoặc một trong nhiều các API định vị dựa trên IP miễn phí có thể không phải rất chính xác.

Đối với phần thứ hai, hiển thị vị trí này trên bản đồ google, bạn có thể kiểm tra ứng dụng này:

http://code.google.com/p/django-googlemap/

0

Bạn có thể sử dụng theo dõi, nhưng tôi không chắc liệu điều này có hiệu quả trong tất cả các trình duyệt hay không.

if (navigator) { 
    if (navigator.geolocation) { 
     navigator.geolocation.getCurrentPosition(function (position) { 
      do_something(position.coords.latitude, position.coords.longitude); 
     }); 
    } 
} 
0

Định vị người dùng sẽ phụ thuộc vào thiết bị mà bạn đang nhắm mục tiêu và granularity/độ chính xác mà bạn muốn hiển thị vị trí của mình trên bản đồ.

Địa chỉ IP phù hợp hơn cho máy tính xách tay và các thiết bị không phải GPS khác. Thứ hai như bạn đã biết, địa chỉ ip sẽ chỉ ghim điểm gateway của người dùng. Trong trường hợp của tôi là cửa ngõ khoảng 8 dặm từ nơi tôi cư trú, do đó bạn có thể tưởng tượng chính xác là chỉ phù hợp với một lớp nhất định của các ứng dụng như công cụ phân tích như Omniture hoặc mixpanel.

Mặt khác, nếu bạn đang phát triển ứng dụng của mình cho thiết bị di động, bạn có thể bắt đầu đọc về câu hỏi trong câu hỏi đặt ra here. Sử dụng gps/agps sẽ cho bạn độ chính xác trong vòng vài mét. Điều này phù hợp hơn với các ứng dụng LBS như gowalla hoặc foursquare. HTML5 giúp bạn dễ dàng triển khai sau này, đặc biệt nếu bạn đang nhắm mục tiêu thiết bị iOS và Android.

Một số mã băm ở trăn được đưa ra dưới đây. Chi tiết về gmaps api v3 có thể được tìm thấy here.

máy chủ thực hiện bằng Python để ghi lại vị trí và tạo dấu

class RecordLocation(webapp.RequestHandler): 
    def post(self): 
    session=SessionManager(self) 
     if session.is_set(): marker=Markers(lat=self.request.get('lat'),lon=self.request.get('lon'),user_id=self.request.get('user')) 
     marker.put() 
     self.response.out.write('<html><body>') 
     self.response.out.write(" Location Updated<br/>") 
     self.response.out.write('</body></html>') 

    class GenerateMarkers(webapp.RequestHandler): 
     def get(self): 
      session=SessionManager(self) 
      if session.is_set(): 
       markers=db.GqlQuery("SELECT * FROM Markers") 
       doc='<?xml version="1.0"?>' 
       doc+='<markers>' 
       for marker in markers: 
        doc+='<marker ' 
        doc+='lat="'+marker.lat+'" ' 
        doc+='lon="'+marker.lon+'" ' 
        doc+='type="restaurant" ' 
        doc+='/>' 
        doc+='</markers>' 
       self.response.out.write(doc) 
Các vấn đề liên quan