Python django.contrib.gis.geos 模块,Point() 实例源码

我们从Python开源项目中,提取了以下49个代码示例,用于说明如何使用django.contrib.gis.geos.Point()

项目:bikewatch    作者:codeformunich    | 项目源码 | 文件源码
def probability(request,ltlat, ltlong, rblat, rblong ,poslat, poslong, dayindex, hourindex):

    #dayindex starts with 1 for sunday, see https://docs.djangoproject.com/en/dev/ref/models/querysets/#week-day

    loc = Point(float(poslong),float(poslat),srid=4326 ) #fixme: check that srid=4326 is right
    print(loc)
    result = Bikes.objects.filter(timestamp__week_day=dayindex).filter(timestamp__hour=hourindex).filter(bikes__gt=0)\
        .extra({'date_found' : "date(timestamp)"}).values('date_found')\
        .annotate(min_distance=Min(Distance('place_coords', loc))).order_by('min_distance')
    result_count = len(result)


    result_ranges = {}
    percentages = [0.25,0.50,0.75,0.90]
    p_ind = 0
    for i in range(result_count): # this finds the minimum distance for which the percentages from the list are fullfiled for bike availability
        percentage_sum = (i+1)/result_count
        while p_ind < len(percentages):
            if percentages[p_ind] <= percentage_sum:
                result_ranges[str(percentages[p_ind])]=result[i]["min_distance"]
                p_ind+=1
            else:
                break
    return HttpResponse(json.dumps(result_ranges), content_type='application/json')
项目:fieldsight-kobocat    作者:awemulya    | 项目源码 | 文件源码
def _set_geom(self):
        xform = self.xform
        data_dictionary = xform.data_dictionary()
        geo_xpaths = data_dictionary.geopoint_xpaths()
        doc = self.get_dict()
        points = []

        if len(geo_xpaths):
            for xpath in geo_xpaths:
                geometry = [float(s) for s in doc.get(xpath, u'').split()]

                if len(geometry):
                    lat, lng = geometry[0:2]
                    points.append(Point(lng, lat))

            if not xform.instances_with_geopoints and len(points):
                xform.instances_with_geopoints = True
                xform.save()

            self.geom = GeometryCollection(points)
项目:fieldsight-kobocat    作者:awemulya    | 项目源码 | 文件源码
def update(self, instance, validated_data):
        data = self.context['request'].data
        type_id = data.pop('type')
        site_type = ProjectType.objects.get(pk=type_id)
        verify_survey = data.pop('is_survey')
        if verify_survey:
            validated_data.update({'is_survey': False})
            validated_data.update({'is_active': True})
        else:
            validated_data.update({'is_survey': True})
            validated_data.update({'is_active': False})

        p = Point(float(validated_data.pop('longitude')), float(validated_data.pop('latitude')), srid=4326)
        validated_data.update({'location':p})
        Site.objects.filter(pk=instance.pk).update(**validated_data)
        site = Site.objects.get(pk=instance.id)
        site.type = site_type
        site.save()
        return site
项目:grical    作者:wikical    | 项目源码 | 文件源码
def test_update_timezone(self):
        event, l = Event.parse_text(EXAMPLE)
        timezone = event.timezone
        latitude = event.latitude
        longitude = event.longitude
        event.coordinates = None
        event.timezone = None
        event.save()
        self.assert_(event.update_timezone())
        self.assertEquals(event.timezone, timezone)
        event.timezone = None
        event.address = None
        event.coordinates = Point(longitude, latitude)
        event.save()
        self.assert_(event.update_timezone())
        self.assertEquals(event.timezone, timezone)
        event.delete()
项目:gigfinder    作者:matthewbdaly    | 项目源码 | 文件源码
def form_valid(self, form):
        # Get data
        latitude = form.cleaned_data['latitude']
        longitude = form.cleaned_data['longitude']

        # Get today's date
        now = timezone.now()

        # Get next week's date
        next_week = now + timezone.timedelta(weeks=1)

        # Get Point
        location = Point(longitude, latitude, srid=4326)

        # Look up events
        events = Event.objects.filter(datetime__gte=now).filter(datetime__lte=next_week).annotate(distance=Distance('venue__location', location)).order_by('distance')[0:5]

        # Render the template
        return render_to_response('gigs/lookupresults.html', {
            'events': events
            })
项目:semillas_platform    作者:Semillas    | 项目源码 | 文件源码
def get_queryset(self):
        queryset = Service.objects.all()
        #Order all the services by distance to the requester user location
        if 'lat' in self.request.query_params and 'lon' in self.request.query_params:
            # Brings lat and lon in request parameters
            ref_location = Point(float(self.request.query_params['lon']),float(self.request.query_params['lat']),srid=4326)
            if not self.request.user.is_anonymous():
                # If user is logged in, save his location
                self.request.user.location = ref_location
                self.request.user.save()
        elif not self.request.user.is_anonymous and (self.request.user.location is not None):
            # User has a location previously saved
            ref_location = self.request.user.location
        else:
            # if no location at all
            geoip = GeoIP2()
            ip = self.request.META['REMOTE_ADDR']
            try:
                ref_location = Point(geoip.lon_lat(ip),srid=4326)
            except AddressNotFoundError:
                ref_location = Point((-3.8196228, 40.4378698), srid=4326) # Madrid
            if not self.request.user.is_anonymous:
                self.request.user.location = ref_location
                self.request.user.save()
        return queryset.annotate(dist = Distance('author__location', ref_location)).order_by('dist')
项目:cyphon    作者:dunbarcyber    | 项目源码 | 文件源码
def _create_test_query(self):
        """
        Helper method that returns an example ReservoirQuery.
        """
        accounts = [Account(username='twitter')]
        locations = [Location(geom=Point(-76.6653729, 39.4904058), buffer_m=1000)]
        searchterms = [
            SearchTerm(term='photos'),
            SearchTerm(term='media')
        ]
        timeframe = self._create_example_timeframe()

        return ReservoirQuery(
            accounts=accounts,
            locations=locations,
            searchterms=searchterms,
            timeframe=timeframe
        )
项目:cyphon    作者:dunbarcyber    | 项目源码 | 文件源码
def convert_circle_to_rectangle(point, radius_m):
    """
    (tuple(int or float, int or float), int or float) -> GEOSGeometry Polygon

    Takes a circle as a (lng, lat) tuple and a radius in meters. Returns the
    smallest rectangular Polygon that encompasses the circle.
    """
    # reverse the lng, lat order to convert to geopy Point format
    center = reverse_coordinate_order(point)

    # create a geopy coordinate calculator for the given distance
    calculator = vincenty(meters=radius_m)

    # calculate points at the given distance in the cardinal directions
    n_pt = calculator.destination(point=center, bearing=0)
    s_pt = calculator.destination(point=center, bearing=180)
    e_pt = calculator.destination(point=center, bearing=90)
    w_pt = calculator.destination(point=center, bearing=270)

    bounds = Bounds(n_lat=n_pt.latitude, s_lat=s_pt.latitude,
                    e_lng=e_pt.longitude, w_lng=w_pt.longitude)

    return bounds.bounding_box
项目:cyphon    作者:dunbarcyber    | 项目源码 | 文件源码
def convert_to_point(location, location_format):
    """
    Takes a dict, tuple, or list of coordinates and converts them to a
    Point.
    """
    if isinstance(location, Point):
        return location
    try:
        if (isinstance(location, dict) and
                'lat' in location and 'lon' in location):
            return Point(location['lon'], location['lat'])
        if location_format.lower().startswith('lat'):
            location = reverse_coordinate_order(location)
        return Point(location)
    except Exception as error:
        LOGGER.error('There was an error processing the location %s: %s',
                     location, error)
项目:cyphon    作者:dunbarcyber    | 项目源码 | 文件源码
def _process_parameters(self, coord, radius_m):
        """
        Helper function to process test parameters through
        the factor_polygon_into_circles function.
        """
        radius_km = units.meters_to_km(radius_m)
        polygon = Polygon(coord)
        points = shapes.factor_polygon_into_circles(polygon, radius_km)

        # take the generated points and turn them into "circles" (polygons)
        radius_in_deg = units.convert_meters_to_degrees(radius_m)
        circles = [Point(point).buffer(radius_in_deg) for point in points]

        # convert the list of circles into a multipolyon and merge them
        merged_circles = MultiPolygon(circles).cascaded_union

        # make sure the merged circles have no holes and completely cover
        # the original polygon
        self.assertTrue(merged_circles.num_interior_rings == 0,
                        'The merged circles had %s holes but should have none'
                        % merged_circles.num_interior_rings)
        self.assertTrue(merged_circles.prepared.covers(polygon),
                        'The merged circles do not cover the polygon')
项目:cyphon    作者:dunbarcyber    | 项目源码 | 文件源码
def shape(self):
        """
        Returns a string indicating the feature type. If the feature type is not
        a Point, Polygon, or Multipolygon, returns 'Other'.
        """
        if isinstance(self.geom, Point):
            if self.has_buffer():
                return 'Circle'
            else:
                return 'Point'

        elif isinstance(self.geom, Polygon):
            if shapes.is_rectangle(self.geom.exterior_ring):
                return 'Rectangle'
            else:
                return 'Polygon'

        elif isinstance(self.geom, MultiPolygon):
            return 'MultiPolygon'

        else:
            return 'Other'
项目:openwisp-controller    作者:openwisp    | 项目源码 | 文件源码
def test_put_update_coordinates(self):
        self.assertEqual(self.location_model.objects.count(), 0)
        dl = self._create_object_location()
        url = reverse(self.url_name, args=[dl.device.pk])
        url = '{0}?key={1}'.format(url, dl.device.key)
        self.assertEqual(self.location_model.objects.count(), 1)
        coords = json.loads(Point(2, 23).geojson)
        feature = json.dumps({'type': 'Feature', 'geometry': coords})
        r = self.client.put(url, feature, content_type='application/json')
        self.assertEqual(r.status_code, 200)
        self.assertDictEqual(r.json(), {
            'type': 'Feature',
            'geometry': coords,
            'properties': {'name': dl.location.name}
        })
        self.assertEqual(self.location_model.objects.count(), 1)
项目:tissuelab    作者:VirtualPlants    | 项目源码 | 文件源码
def test_olwidget_has_changed(self):
        """
        Check that changes are accurately noticed by OpenLayersWidget.
        """
        geoadmin = admin.site._registry[City]
        form = geoadmin.get_changelist_form(None)()
        has_changed = form.fields['point']._has_changed

        initial = Point(13.4197458572965953, 52.5194108501149799, srid=4326)
        data_same = "SRID=3857;POINT(1493879.2754093995 6894592.019687599)"
        data_almost_same = "SRID=3857;POINT(1493879.2754093990 6894592.019687590)"
        data_changed = "SRID=3857;POINT(1493884.0527237 6894593.8111804)"

        self.assertTrue(has_changed(None, data_changed))
        self.assertTrue(has_changed(initial, ""))
        self.assertFalse(has_changed(None, ""))
        self.assertFalse(has_changed(initial, data_same))
        self.assertFalse(has_changed(initial, data_almost_same))
        self.assertTrue(has_changed(initial, data_changed))
项目:tissuelab    作者:VirtualPlants    | 项目源码 | 文件源码
def test02_select_related(self):
        "Testing `select_related` on geographic models (see #7126)."
        qs1 = City.objects.all()
        qs2 = City.objects.select_related()
        qs3 = City.objects.select_related('location')

        # Reference data for what's in the fixtures.
        cities = (
            ('Aurora', 'TX', -97.516111, 33.058333),
            ('Roswell', 'NM', -104.528056, 33.387222),
            ('Kecksburg', 'PA',  -79.460734, 40.18476),
        )

        for qs in (qs1, qs2, qs3):
            for ref, c in zip(cities, qs):
                nm, st, lon, lat = ref
                self.assertEqual(nm, c.name)
                self.assertEqual(st, c.state)
                self.assertEqual(Point(lon, lat), c.location.point)
项目:api-django    作者:lafranceinsoumise    | 项目源码 | 文件源码
def to_python(self, value):
        if value in self.empty_values:
            return None

        try:
            obj = json.loads(value)
        except JSONDecodeError:
            raise DjangoValidationError(self.default_error_messages['invalid_json'], code='invalid_json')

        if set(obj) != {'max_distance', 'coordinates'}:
            raise DjangoValidationError(self.default_error_messages['invalid_fields'], code='invalid_fields')

        max_distance = obj['max_distance']
        coordinates = obj['coordinates']

        try:
            max_distance = float(max_distance)
        except ValueError:
            raise DjangoValidationError(self.default_error_messages['invalid_max_distance'], code='invalid_max_distance')


        if not check_coordinates(coordinates):
            raise DjangoValidationError(self.default_error_messages['invalid_coordinates'], code='invalid_coordinates')

        return Point(*coordinates), Distance(m=max_distance)
项目:sahaf    作者:EmreYavuz216    | 项目源码 | 文件源码
def create(self,validated_data):
        request = self.context['request']
        book_data = validated_data.pop('BookId')
        book = Book.objects.create(**book_data)
        advert  = Advert.objects.create(**validated_data)
        advert.save()
        advert.BookId = book 
        advert.SellerId_id = self.context['request'].user.id
        json = self.context['request'].data
        if 'Image' in json.keys():
            photo = PhotoUser.objects.get(token=json['Image'])
            advert.Photo = photo.Photo
            advert.save()
        tuple_x_y = (advert.Latitude,advert.Longitude)
        advert.Point = Point(tuple_x_y)
        seller_adverts = Advert.objects.filter(Q(SellerId_id=request.user.id,IsSold=False))
        for seller_advert in seller_adverts:
            if seller_advert.BookId.Name in book.Name:
                book.delete()
                advert.delete()
                return {'IsSuccess':False,context:'same advert'}
        advert.save()
        data = {'IsSuccess':True,'context':''}
        #self.context['request'].user.id 
        return data
项目:sahaf    作者:EmreYavuz216    | 项目源码 | 文件源码
def distance(self,obj):
        if 'location' in self.context.keys():
            request = self.context['request']
            tuple_x_y  = (float(request.query_params['Latitude']),float(request.query_params['Longitude']))
            point = Point(tuple_x_y,srid=4326)
            result = distance(obj.Point,point).km
            if result < 5:
                return '5 km içerisinde'
            elif result > 5 and result < 10:
                return '10 km içerisinde'
            elif result > 10 and result < 25:
                return '25 km içerisinde'
            elif result > 25 and result < 50:
                return '50 km içerisinde'
            else:
                return obj.City + ' çevresinde'
        return obj.City + ' çevresinde'
项目:FormShare    作者:qlands    | 项目源码 | 文件源码
def _set_geom(self):
        xform = self.xform
        data_dictionary = xform.data_dictionary()
        geo_xpaths = data_dictionary.geopoint_xpaths()
        doc = self.get_dict()
        points = []

        if len(geo_xpaths):
            for xpath in geo_xpaths:
                geometry = [float(s) for s in doc.get(xpath, u'').split()]

                if len(geometry):
                    lat, lng = geometry[0:2]
                    points.append(Point(lng, lat))

            if not xform.instances_with_geopoints and len(points):
                xform.instances_with_geopoints = True
                xform.save()

            self.geom = GeometryCollection(points)
项目:postcodes-mapit    作者:mhl    | 项目源码 | 文件源码
def polygon_requires_clipping(wgs84_polygon):
        geom_type = wgs84_polygon.geom_type
        if geom_type == 'MultiPolygon':
            polygons = wgs84_polygon.coords
        elif geom_type == 'Polygon':
            polygons = [wgs84_polygon.coords]
        else:
            raise Exception("Unknown geom_type {0}".format(geom_type))
        for polygon in polygons:
            for t in polygon:
                for x, y in t:
                    point = Point(x, y)
                    if not uk_multipolygon.contains(point):
                        return True
        return False

    # ------------------------------------------------------------------------

    # Make sure the output directory exists:
项目:parkkihubi    作者:City-of-Helsinki    | 项目源码 | 文件源码
def generate_point():
    return Point(
        24.915 + fake.random.uniform(0, 0.040),
        60.154 + fake.random.uniform(0, 0.022),
        srid=4326,
    )
项目:parkkihubi    作者:City-of-Helsinki    | 项目源码 | 文件源码
def generate_polygon():
    center = generate_point()
    points = [
        Point(
            center.x + fake.random.uniform(-0.001, 0.001),
            center.y + fake.random.uniform(-0.001, 0.001),
            srid=4326,
        ).transform(3879, clone=True)
        for _ in range(3)
    ]
    points.append(points[0])
    return Polygon(points)
项目:parkkihubi    作者:City-of-Helsinki    | 项目源码 | 文件源码
def create_parking(operator_id=1, registration_number='ABC-123', **kwargs):
    return Parking(
        location=Point(60.193609, 24.951394),
        operator_id=operator_id,
        registration_number=registration_number,
        time_end=now() + datetime.timedelta(days=1),
        time_start=now(),
        zone=3,
        **kwargs
    )
项目:parkkihubi    作者:City-of-Helsinki    | 项目源码 | 文件源码
def test_location_set_from_terminal(admin_user):
    operator = Operator.objects.get_or_create(user=admin_user)[0]
    terminal = ParkingTerminal.objects.get_or_create(
        number=4567, defaults={
            'location': Point(61, 25), 'name': "Test terminal"})[0]
    parking = create_parking(operator_id=operator.pk, terminal_number=4567)
    parking.location = None
    parking.save()
    assert parking.location == terminal.location
项目:parkkihubi    作者:City-of-Helsinki    | 项目源码 | 文件源码
def test_location_not_overridden_from_terminal(admin_user):
    operator = Operator.objects.get_or_create(user=admin_user)[0]
    terminal = ParkingTerminal.objects.get_or_create(
        number=4567, defaults={
            'location': Point(61, 25), 'name': "Test terminal"})[0]
    parking = create_parking(operator_id=operator.pk, terminal_number=4567)
    location = parking.location
    parking.save()
    assert parking.location == location
    assert parking.location != terminal.location
项目:parkkihubi    作者:City-of-Helsinki    | 项目源码 | 文件源码
def _get_polygons(self, geom):
        """
        Turns the XML containing coordinates into a multipolygon
        """
        polygons = []
        for pos in geom.iter('*'):
            # get leaf nodes. Treat LinearRing and MultiSurface the same way
            if len(pos) == 0:
                positions = list(filter(None, pos.text.split(' ')))
                points = []
                points_as_pairs = zip(positions[1::2], positions[::2])
                for latitude, longitude in points_as_pairs:
                    points.append(Point(float(latitude), float(longitude)))
                polygons.append(Polygon(points))
        return MultiPolygon(polygons)
项目:CodingDojo    作者:ComputerSocietyUNB    | 项目源码 | 文件源码
def geos(self, query):
        "Returns a GEOS Point object for the given query."
        ll = self.lon_lat(query)
        if ll:
            from django.contrib.gis.geos import Point
            return Point(ll, srid=4326)
        else:
            return None

    # #### GeoIP Database Information Routines ####
项目:CodingDojo    作者:ComputerSocietyUNB    | 项目源码 | 文件源码
def get_lon_lat(self, lonlat):
        "Unpacks longitude, latitude from GEOS Points and 2-tuples."
        if isinstance(lonlat, Point):
            lon, lat = lonlat.coords
        else:
            lon, lat = lonlat
        return lon, lat
项目:CodingDojo    作者:ComputerSocietyUNB    | 项目源码 | 文件源码
def get_width_height(self, extent):
        """
        Returns the width and height for the given extent.
        """
        # Getting the lower-left, upper-left, and upper-right
        # coordinates from the extent.
        ll = Point(extent[:2])
        ul = Point(extent[0], extent[3])
        ur = Point(extent[2:])
        # Calculating the width and height.
        height = ll.distance(ul)
        width = ul.distance(ur)
        return width, height
项目:CodingDojo    作者:ComputerSocietyUNB    | 项目源码 | 文件源码
def geos(self, query):
        "Return a GEOS Point object for the given query."
        ll = self.lon_lat(query)
        if ll:
            from django.contrib.gis.geos import Point
            return Point(ll, srid=4326)
        else:
            return None

    # #### GeoIP Database Information Routines ####
项目:NarshaTech    作者:KimJangHyeon    | 项目源码 | 文件源码
def geos(self, query):
        "Returns a GEOS Point object for the given query."
        ll = self.lon_lat(query)
        if ll:
            from django.contrib.gis.geos import Point
            return Point(ll, srid=4326)
        else:
            return None

    # #### GeoIP Database Information Routines ####
项目:NarshaTech    作者:KimJangHyeon    | 项目源码 | 文件源码
def get_lon_lat(self, lonlat):
        "Unpacks longitude, latitude from GEOS Points and 2-tuples."
        if isinstance(lonlat, Point):
            lon, lat = lonlat.coords
        else:
            lon, lat = lonlat
        return lon, lat
项目:NarshaTech    作者:KimJangHyeon    | 项目源码 | 文件源码
def get_width_height(self, extent):
        """
        Returns the width and height for the given extent.
        """
        # Getting the lower-left, upper-left, and upper-right
        # coordinates from the extent.
        ll = Point(extent[:2])
        ul = Point(extent[0], extent[3])
        ur = Point(extent[2:])
        # Calculating the width and height.
        height = ll.distance(ul)
        width = ul.distance(ur)
        return width, height
项目:NarshaTech    作者:KimJangHyeon    | 项目源码 | 文件源码
def geos(self, query):
        "Return a GEOS Point object for the given query."
        ll = self.lon_lat(query)
        if ll:
            from django.contrib.gis.geos import Point
            return Point(ll, srid=4326)
        else:
            return None

    # #### GeoIP Database Information Routines ####
项目:Scrum    作者:prakharchoudhary    | 项目源码 | 文件源码
def geos(self, query):
        "Returns a GEOS Point object for the given query."
        ll = self.lon_lat(query)
        if ll:
            from django.contrib.gis.geos import Point
            return Point(ll, srid=4326)
        else:
            return None

    # #### GeoIP Database Information Routines ####
项目:Scrum    作者:prakharchoudhary    | 项目源码 | 文件源码
def _handle_empty_point(self, geom):
        from django.contrib.gis.geos import Point
        if isinstance(geom, Point) and geom.empty:
            if self.srid:
                # PostGIS uses POINT(NaN NaN) for WKB representation of empty
                # points. Use it for EWKB as it's a PostGIS specific format.
                # https://trac.osgeo.org/postgis/ticket/3181
                geom = Point(float('NaN'), float('NaN'), srid=geom.srid)
            else:
                raise ValueError('Empty point is not representable in WKB.')
        return geom
项目:Scrum    作者:prakharchoudhary    | 项目源码 | 文件源码
def geos(self, query):
        "Return a GEOS Point object for the given query."
        ll = self.lon_lat(query)
        if ll:
            from django.contrib.gis.geos import Point
            return Point(ll, srid=4326)
        else:
            return None

    # #### GeoIP Database Information Routines ####
项目:django    作者:alexsukhrin    | 项目源码 | 文件源码
def geos(self, query):
        "Returns a GEOS Point object for the given query."
        ll = self.lon_lat(query)
        if ll:
            from django.contrib.gis.geos import Point
            return Point(ll, srid=4326)
        else:
            return None

    # #### GeoIP Database Information Routines ####
项目:django    作者:alexsukhrin    | 项目源码 | 文件源码
def _handle_empty_point(self, geom):
        from django.contrib.gis.geos import Point
        if isinstance(geom, Point) and geom.empty:
            if self.srid:
                # PostGIS uses POINT(NaN NaN) for WKB representation of empty
                # points. Use it for EWKB as it's a PostGIS specific format.
                # https://trac.osgeo.org/postgis/ticket/3181
                geom = Point(float('NaN'), float('NaN'), srid=geom.srid)
            else:
                raise ValueError('Empty point is not representable in WKB.')
        return geom
项目:django    作者:alexsukhrin    | 项目源码 | 文件源码
def geos(self, query):
        "Return a GEOS Point object for the given query."
        ll = self.lon_lat(query)
        if ll:
            from django.contrib.gis.geos import Point
            return Point(ll, srid=4326)
        else:
            return None

    # #### GeoIP Database Information Routines ####
项目:djangocms-association    作者:python-spain    | 项目源码 | 文件源码
def post(self, request, data):
        if not data.get('name') and not data.get('lat'):
            return HttpResponseServerError("Name or coords is required.")
        if data.get('name'):
            model = {'city': City, 'subregion': Subregion, 'region': Region}.get(data.get('model'))
            if not model:
                return HttpResponseServerError("Invalid model: {}".format(data.get('model')))
            obj = get_object_or_404(model, pk=data['name'])
        else:
            # http://stackoverflow.com/a/35079313
            pnt = Point(float(data.get('lon', 0)), float(data.get('lat', 0)), srid=4326)
            order_by_expression = CombinedExpression(F('location'), '<->', GeomValue(pnt))
            try:
                obj = City.objects.order_by(order_by_expression)[0]
            except IndexError:
                return
        fields = ['subregion', 'region', 'region__country', 'country']
        data = {getattr(obj, key).__class__.__name__: {x: getattr(getattr(obj, key), x) for x in ['id', 'name']}
                for key in fields if hasattr(obj, key)}
        if not data.get('name'):
            # Is geo coord search
            data['city'] = {'id': obj.pk, 'name': obj.name}
        if hasattr(obj, 'location'):
            order_by_expression = CombinedExpression(F('location'), '<->', GeomValue(obj.location))
            try:
                data['postal_code'] = PostalCode.objects.order_by(order_by_expression)[0].code
            except IndexError:
                pass
            data['coords'] = obj.location.coords
        return data
项目:CommunityCellularManager    作者:facebookincubator    | 项目源码 | 文件源码
def post(self, request):
        if not (request.POST.get('uuid') and
                request.POST.get('long') and
                request.POST.get('lat') and
                request.POST.get('bands')
        ):
            return Response("Missing arguments", status=status.HTTP_406_NOT_ACCEPTABLE)

        req_bands = request.POST.get('bands').split(',')
        for band in req_bands:
            if not (band in BTS.bands):
                return Response("Invalid Arguments", status=status.HTTP_400_BAD_REQUEST)

        pnt = GEOSGeometry(Point(float(request.POST.get('long')),
                                 float(request.POST.get('lat'))))

        with transaction.atomic():
            tower = BTS.objects.get(uuid=request.POST.get('uuid'))
            nearby_towers = BTS.objects.filter(
                location__distance_lt=(pnt,D(km=RANGE))).exclude(uuid=request.POST.get('uuid'))
            used_channels = dict.fromkeys(BTS.bands.keys(), set())
            for tower in nearby_towers:
                if (tower.band): #skip those without set bands
                    used_channels[tower.band].add(tower.channel)
            free_channels = dict.fromkeys(req_bands)
            for band in req_bands:
                free_channels[band] = BTS.bands[band]['valid_values'].difference(used_channels[band])
                if (len(free_channels[band]) > 0): #something available
                    return Response({ band : free_channels[band],
                                      'power_level' : POWER_LEVEL},
                                    status=status.HTTP_200_OK)
            return Response("No Available Bands", status=status.HTTP_404_NOT_FOUND)
项目:CommunityCellularManager    作者:facebookincubator    | 项目源码 | 文件源码
def post(self, request):
        if not (
                request.POST.get('uuid') and
                request.POST.get('lat') and
                request.POST.get('long') and
                request.POST.get('band') and
                request.POST.get('channel') and
                request.POST.get('power_level')
        ):
            return Response("Missing Arguments", status=status.HTTP_406_NOT_ACCEPTABLE)

        if not (
                request.POST.get('band') in BTS.bands and
                request.POST.get('channel').isdigit() and
                request.POST.get('power_level').isdigit()
        ):
            return Response("Invalid Arguments", status=status.HTTP_400_BAD_REQUEST)

        pnt = GEOSGeometry(Point(float(request.POST.get('long')),
                                 float(request.POST.get('lat'))))

        with transaction.atomic():
            tower = BTS.objects.get(uuid=request.POST.get('uuid')) 
            nearby_towers = BTS.objects.filter(
                location__distance_lt=(pnt,D(km=RANGE))).filter(
                    band=request.POST.get('band')).exclude(uuid=request.POST.get('uuid'))
            for t in nearby_towers:
                if (int(request.POST.get('channel')) == t.channel):
                    return Response("Channel In Use", status=status.HTTP_409_CONFLICT)
            #no one interfered
            tower.channel = int(request.POST.get('channel'))
            tower.location = pnt
            tower.band = request.POST.get('band')
            tower.save()
            return Response("Success", status=status.HTTP_200_OK)
项目:tumanov_castleoaks    作者:Roamdev    | 项目源码 | 文件源码
def get_point(self, srid=4326):
        from django.contrib.gis.geos import Point
        return Point(float(self._lng), float(self._lat), srid=srid)
项目:georef    作者:rukayaj    | 项目源码 | 文件源码
def add_potential_georeference(self, lat, long, profile_name, locality_name=False, precision_m=False):
        # Geographical position
        point = Point(long, lat)
        gp, created = GeographicalPosition.objects.get_or_create(point=point)

        # Precision
        if precision_m:
            gp.precision_m = precision_m

        # Author profile
        profile = Profile.objects.get(name=profile_name)

        # Locality name
        if not locality_name:
            ln = self.locality_name
        else:
            ln, created = LocalityName.objects.get_or_create(locality_name=locality_name)

        # Georeference
        gr, created = GeoReference.objects.get_or_create(geographical_position=gp,
                                                         locality_name=ln,
                                                         author=profile)

        # Add it to list
        if gr not in self.potential_georeferences.values():
            self.potential_georeferences.add(gr)
项目:Gypsy    作者:benticarlos    | 项目源码 | 文件源码
def geos(self, query):
        "Returns a GEOS Point object for the given query."
        ll = self.lon_lat(query)
        if ll:
            from django.contrib.gis.geos import Point
            return Point(ll, srid=4326)
        else:
            return None

    # #### GeoIP Database Information Routines ####
项目:Gypsy    作者:benticarlos    | 项目源码 | 文件源码
def get_lon_lat(self, lonlat):
        "Unpacks longitude, latitude from GEOS Points and 2-tuples."
        if isinstance(lonlat, Point):
            lon, lat = lonlat.coords
        else:
            lon, lat = lonlat
        return lon, lat
项目:Gypsy    作者:benticarlos    | 项目源码 | 文件源码
def get_width_height(self, extent):
        """
        Returns the width and height for the given extent.
        """
        # Getting the lower-left, upper-left, and upper-right
        # coordinates from the extent.
        ll = Point(extent[:2])
        ul = Point(extent[0], extent[3])
        ur = Point(extent[2:])
        # Calculating the width and height.
        height = ll.distance(ul)
        width = ul.distance(ur)
        return width, height
项目:Gypsy    作者:benticarlos    | 项目源码 | 文件源码
def geos(self, query):
        "Return a GEOS Point object for the given query."
        ll = self.lon_lat(query)
        if ll:
            from django.contrib.gis.geos import Point
            return Point(ll, srid=4326)
        else:
            return None

    # #### GeoIP Database Information Routines ####
项目:DjangoBlog    作者:0daybug    | 项目源码 | 文件源码
def geos(self, query):
        "Returns a GEOS Point object for the given query."
        ll = self.lon_lat(query)
        if ll:
            from django.contrib.gis.geos import Point
            return Point(ll, srid=4326)
        else:
            return None

    # #### GeoIP Database Information Routines ####