Esempio n. 1
0
 def clean(self, *args, **kwargs):
     cleaned_data = super(Form_insert_home_administration, self).clean(*args, **kwargs)
     form = super(Form_insert_home_administration, self)
     if form.is_valid():
         
         # api yandex key
         api_key = settings.YANDEX_MAPS_API_KEY
         splited_home = self.cleaned_data["home_numbers"].split(',')
         coordinates, homes = [], []
         for home in splited_home:
             if home != "":
                 try: 
                     check_adress = ConectionInputHomeAdmin.objects.get(street__street__icontains=self.cleaned_data["street1"].encode("utf-8"), house__house=home)
                 except:
                     homes.append(home)
         
         if  homes == []:
             raise forms.ValidationError("ВСЕ введённые дома уже есть в базе ")
         else:           
             self.homes = homes            
             for home in homes:            
                 address = str(self.cleaned_data["city"]) + " " + str(self.cleaned_data["street_types"].encode('utf-8')) + " " + str(self.cleaned_data["street1"].encode('utf-8')) + " " + str(home.encode('utf-8'))            
                 # geocoding yandex
                 pos = api.geocode(api_key, address)
                 if pos[0] == None and pos[1] == None:
                     raise forms.ValidationError("Неудаётся получить координаты-нет ответа от YANDEX")                   
                 if (str(self.cleaned_data["city"]) != 'Москва') and (str(self.cleaned_data["city"]) != 'Санкт-Петербург'):
                     self.coordinates = [None, None]
                 elif not (((37.17 < float(pos[0]) < 37.86) and (55.54 < float(pos[1]) < 55.93) and (str(self.cleaned_data["city"]) == 'Москва')) or ((29.75 < float(pos[0]) < 30.55) and (59.78 < float(pos[1]) < 60.11) and (str(self.cleaned_data["city"]) == 'Санкт-Петербург'))):
                     raise forms.ValidationError("Проверьте название улицы и номер дома")                      
                 coordinates.append([pos[0], pos[1]])
             self.coordinates = coordinates
     return cleaned_data
Esempio n. 2
0
    def clean(self, *args, **kwargs):
        cleaned_data = super(PrefectursAdminForm, self).clean(*args, **kwargs)
        form = super(PrefectursAdminForm, self)
        if form.is_valid():
            print "valid"
            adress1 = self.cleaned_data["adress1"]
        # api yandex key
            api_key = settings.YANDEX_MAPS_API_KEY
            
            # geocoding yandex
            pos = api.geocode(api_key, adress1.encode('utf-8'))
            print "x %s" % pos[0]
            print "y %s" % pos[1] 
            if pos:
                self.coordinates = [pos[0], pos[1]]
                prefectures_coordinates = Prefecturs.objects.filter(x=pos[1], y=pos[0])
#                 if prefectures_coordinates:
#                     raise forms.ValidationError("Проверьте адрес, такие геокоординаты уже есть")
                if not ((37.17 < float(pos[0]) < 37.86) and (55.54 < float(pos[1]) < 55.93)  or ((29.75 < float(pos[0]) < 30.55) and (59.78 < float(pos[1]) < 60.11))):
                    raise forms.ValidationError("Проверьте адрес")
            else:
                raise forms.ValidationError("не удалось получить геопараметры")
       
            
        return cleaned_data
Esempio n. 3
0
 def clean(self, *args, **kwargs):
     cleaned_data = super(Connection_address_Admin_Form, self).clean(*args, **kwargs)
     street1 = self.cleaned_data["street1"]
     street_type1 = self.cleaned_data["street_types"]
     city = self.cleaned_data["city"]
     # check for existing address
     separator = street1.rfind(" ")
         # street
     strstreet = street1[:separator]
         # house
     strhouse = street1[separator + 1:]
     idexist = self.instance.id
     addressexist = Connection_address.objects.filter(city__city=city, street__street=strstreet, street__street_type=street_type1, house__house=strhouse)
     if (addressexist and not(idexist)):
         raise forms.ValidationError("Такой адрес уже есть")
     # end of checking existing address
             # api yandex key
     api_key = settings.YANDEX_MAPS_API_KEY
     st = street1.encode('utf-8')
     st1 = street_type1.encode('utf-8')
     address = str(city) + " " + str(st1) + " " + str(st)
     # geocoding yandex
     pos = api.geocode(api_key, address)
     if ((pos[0] != None) and (pos[1] != None)):  # если геокодирование вернуло результаты
         self.coordinates = [pos[0], pos[1]]
         if (str(city) != 'Москва') and (str(city) != 'Санкт-Петербург'):
                 self.coordinates = [None, None]
         elif not (((37.17 < float(pos[0]) < 37.86) and (55.54 < float(pos[1]) < 55.93) and (str(city) == 'Москва')) or ((29.75 < float(pos[0]) < 30.55) and (59.78 < float(pos[1]) < 60.11) and (str(city) == 'Санкт-Петербург'))):
             raise forms.ValidationError("Проверьте название улицы и номер дома")
             
     return cleaned_data
Esempio n. 4
0
def Parser_maps(file_spisok):
    k = open(spisok, 'r')
    r = open(result, 'w')
    for line in k:
        allmas = line.split('"')
        homes = allmas[5].split(',')
        for i in homes:
            city = allmas[1]
            street = allmas[3]
            pos = api.geocode(api_key, city + ',' + street + i)
            try:
                res = city + ' ' + street + ' ' + i + ' ' + pos[0].encode('UTF-8') + ' ' + pos[1].encode('UTF-8') + '\n'
                r.write(res)
                print city, street, i, pos, len(homes)
            except AttributeError:
                res = city + ' ' + street + ' ' + i + ' ' + 'No results!' + ' ' + 'No results!' + '\n'
    r.close()
    k.close()
Esempio n. 5
0
 def fill_geocode_data(self):
     if YANDEX_KEY is not None:
         longtitude, latitude = api.geocode(settings.YANDEX_MAPS_API_KEY,
                                            self.address)
         if self.pk and longtitude and latitude or not self.pk:
             self.longtitude, self.latitude = longtitude, latitude
Esempio n. 6
0
 def test_geocode(self):
     pos = geocode("Москва")
     self.assertEqual(pos[0][:5], COORDS[0][:5])
     self.assertEqual(pos[1][:5], COORDS[1][:5])
Esempio n. 7
0
 def fill_geocode_data(self):
     if YANDEX_KEY is not None:
         self.longitude, self.latitude = api.geocode(settings.YANDEX_MAPS_API_KEY, self.address)
Esempio n. 8
0
def apply_changes(request):
    if not request.POST.has_key('zayavka_id'):
        raise Http404

    zayavka_id = request.POST.get('zayavka_id')

    # находим заявку в базе
    zayavka_obj = MobiOrganizationsUserChanges.objects.get(id=zayavka_id)
    # находим организацию для изменения
    org_obj = MobiOrganizationsUnique.objects.get(id=zayavka_obj.org_id.id)
    # отменить или принять заявку
    action = request.POST.get('action')

    if action == 'ok':  # если применить зафвку
        u_org_name = request.POST.get('u_org_name')
        u_org_address = request.POST.get('u_org_address')
        u_org_phone = request.POST.get('u_org_phone')
        u_org_url = request.POST.get('u_org_url')
        u_org_hours = request.POST.get('u_org_hours')
        to_del = request.POST.get('to_del')

        if to_del == 'on':

            # сохраняем измениния для заявки
            zayavka_obj.u_org_name = u_org_name
            zayavka_obj.u_address = u_org_address
            zayavka_obj.u_phone = u_org_phone
            zayavka_obj.u_url = u_org_url
            zayavka_obj.u_hours = u_org_hours
            zayavka_obj.applied = True
            zayavka_obj.save()
            # удаляем организацию
            org_obj.deleted = True
            org_obj.save()
            str = 'ok'

        else:  # если организация не  помечена к удалению

            if u_org_name != '':
                org_obj.org_name = u_org_name

            # геокодировать новый адрес
            if u_org_address != '':
                org_obj.address = u_org_address
                api_key = settings.YANDEX_MAPS_API_KEY
                # geocoding yandex
                pos = api.geocode(api_key, u_org_address)
                org_obj.x = pos[0]
                org_obj.y = pos[1]

            if u_org_phone != '':
                org_obj.phone = u_org_phone

            if u_org_url != '':
                org_obj.url = u_org_url

            if u_org_hours != '':
                org_obj.hours = u_org_hours

            # сохраняем измениния для заявки

            zayavka_obj.u_org_name = u_org_name
            zayavka_obj.u_address = u_org_address
            zayavka_obj.u_phone = u_org_phone
            zayavka_obj.u_url = u_org_url
            zayavka_obj.u_hours = u_org_hours

            zayavka_obj.applied = True
            zayavka_obj.save()
            # сохраняем изменения для организации
            org_obj.save()
            str = 'ok'

    else:  # если отклонить заявку
        zayavka_obj.applied = True
        zayavka_obj.save()
        str = 'cancel'

    return HttpResponse(str)
Esempio n. 9
0
 def fill_geocode_data(self):
     self.longitude, self.latitude = api.geocode(self.address)
Esempio n. 10
0
 def get_point(self, address):
     api_key = 'AL58ZlIBAAAA7Xs2NwIANDolptueIwOHHYvb76TmuGgXIu4AAAAAAAAAAAAuO3HCoZ2VUAPtAsm6-MOrhoGN-w=='
     pos = api.geocode(api_key, u'Москва ' + address)
     if pos[0] is None:
         return None
     return {'x': float(pos[0]), 'y': float(pos[1])}
Esempio n. 11
0
 def fill_geocode_data(self):
     if YANDEX_KEY is not None:
         self.longitude, self.latitude = api.geocode(
             settings.YANDEX_MAPS_API_KEY, self.address)
Esempio n. 12
0
    def handle(self, *args, **options):

        city_levels = [1, 2, 3, 4, 5, 6]
        street_levels = [7, 90, 91]

        region_cities = [u'Москва', u'Санкт-Петербург']

        address_examples = [
            u'129515, Москва, ул. Академика Королева, д. 4, корп. 4',
            u'625016, Тюмень, улица Логунова, 6, 72',
            u'117036, Москва, пр. Черемушкинский, д. 5',
            u'614077, Пермский, Пермь, б-р Гагарина, д. 60 Б',
            u'236029, Калининград, ул. Беломорская, 23, кв. 2',
            u'117119, Москва, переулок Лефортовский, 12/50, 1',
            u'353411, Краснодарский край, Анапский район, с. Супсех, ул. Мира, д. 7',
            u'603022, г Нижний Новгород, ул Малая Ямская, д 78, А',
            u'362007, г Владикавказ, ул Кутузова, д 8',
            u'450106, Уфа, ул. Степана Кувыкина, 25/1',
            u'194100, Санкт-Петербург, ул. Кантемировская, 12, лит. А, пом. 41-Н',
            u'115093, Москва, переулок Партийный, 1, корп. 57, стр. 3',
            u'630028, Новосибирская обл., Новосибирск, Нижегородская ул., 280',
            u'636210, Томская область, Бакчарский район, п Плотниково, ул Трактовая, д 18',
            u'429282, Чувашская Республика, Янтиковский р-н, с. Яншихово-Норваши, ул. Ленина, 4',
            u'123100, Москва, Шмитовский проезд, 13/6, 1',
            u'680006, Г ХАБАРОВСК, УЛ ЦЕНТРАЛЬНАЯ, Д 10, ОФ 63',
        ]


        for address_string in address_examples:
            print u'\n\n %s' % address_string

            address_vals = address_string.split(',')
            index = address_vals[0].strip()
            address_iter_vals = address_vals[1:]

            housenum = []

            region_name = u''
            city_name = u''
            street_name = u''

            kladr_code = u''
            city_code = u''
            street_code = u''
            street_aoguid = u''

            city_flag = False
            street_flag = False

            for address_iter_val in address_iter_vals:
                print u'iter val   ', address_iter_val
                item_addr_objs = []

                #replacing all socr names
                address_iter_val = address_iter_val.strip().lower()
                address_iter_val = address_iter_val.replace(u'.', u'')
                for replace_item in ADDRESS_SOCRNAMES + ADDRESS_SCNAMES:
                    replace_item_start_low = u'%s ' % replace_item.lower()
                    replace_item_start = u'%s ' % replace_item
                    replace_item_end_low = u' %s' % replace_item.lower()
                    replace_item_end = u' %s' % replace_item
                    if address_iter_val.startswith(replace_item_start):
                        address_iter_val = address_iter_val.replace(replace_item_start, u'')
                    elif address_iter_val.startswith(replace_item_start_low):
                        address_iter_val = address_iter_val.replace(replace_item_start_low, u'')
                    if address_iter_val.endswith(replace_item_end):
                        address_iter_val = address_iter_val.replace(replace_item_end, u'')
                    elif address_iter_val.endswith(replace_item_end_low):
                        address_iter_val = address_iter_val.replace(replace_item_end_low, u'')


                address_item = address_iter_val.strip()

                #finding city_name
                if not city_name:
                    adr_objs = AddressObj.objects.filter(FORMALNAME=address_item, AOLEVEL__in=city_levels, ACTSTATUS=1)
                    if not adr_objs and address_item not in region_cities:
                        adr_objs = AddressObj.objects.filter(FORMALNAME__contains=address_item, AOLEVEL__in=city_levels, ACTSTATUS=1)
                    if kladr_code:
                        adr_objs = adr_objs.filter(CODE__startswith=kladr_code).order_by('AOLEVEL')
                    else:
                        adr_objs = adr_objs.order_by('AOLEVEL')
                    if adr_objs:
                        adr_obj = adr_objs[0]
                        print address_item, adr_obj.AOLEVEL, adr_obj.FORMALNAME, adr_obj.CITYCODE, adr_obj.PLACECODE
                        if adr_obj.CITYCODE != u'000' or adr_obj.PLACECODE != u'000' or adr_obj.FORMALNAME in region_cities:
                            city_name = u'%s %s' % (adr_obj.FORMALNAME, adr_obj.SHORTNAME)
                            city_code = adr_obj.CODE
                            region_name = adr_obj.parse_fias()['region']
                        kladr_full_code =  adr_obj.CODE
                        kladr_list1 = list(kladr_full_code)
                        kladr_list2 = []
                        kladr_list1.reverse()
                        kladr_flag = False
                        for item in kladr_list1:
                            if item != u'0':
                                kladr_flag = True
                            if kladr_flag:
                                kladr_list2.append(item)
                        kladr_list2.reverse()
                        kladr_code = ''.join(kladr_list2)
                        #if we get city_name immediatly start next iteration
                        continue



                #finding street name
                if not street_name and city_name:
                    adr_objs = AddressObj.objects.filter(FORMALNAME=address_item, AOLEVEL__in=street_levels, ACTSTATUS=1, CODE__startswith=kladr_code).order_by('AOLEVEL')
                    if not adr_objs:
                        adr_objs = AddressObj.objects.filter(FORMALNAME__contains=address_item, AOLEVEL__in=street_levels, ACTSTATUS=1, CODE__startswith=kladr_code).order_by('AOLEVEL')
                    if adr_objs:
                        adr_obj = adr_objs[0]
                        #print adr_obj.AOLEVEL, adr_obj.FORMALNAME, adr_obj.STREETCODE
                        street_name = u'%s %s' % (adr_obj.FORMALNAME, adr_obj.SHORTNAME)
                        street_code = adr_obj.CODE
                        street_aoguid = adr_obj.AOGUID
                        continue

                #append everything after street_name to housenum
                if street_name:
                    housenum.append(address_item)

            # empty city for Москва Санкт-Петербург
            if city_name in region_cities:
                city_name = u''
                city_code = u''

            # arrange house number and office number
            office_shorts = [u'кв', u'квартира', u'оф', u'офис']

            if housenum:
                if len(housenum) == 1:
                    house_number = u'%s~~' % housenum[0]
                    office_number = u''
                elif len(housenum) == 2:
                    house_number = u'%s~%s~' % (housenum[0], housenum[1])
                    office_number = u''
                    for office_short in office_shorts:
                        if office_short in housenum[1]:
                            house_number = u'%s~~' % housenum[0]
                            office_number = housenum[1].replace(office_short, u'')
                            break

                else:
                    house_number = u'%s~%s~' % (housenum[0], housenum[1])
                    office_number = '~'.join(housenum[2:])
            else:
                house_number = u''
                office_number = u''

            # testing xml template
            xml_template = u'''
                <Region>%s</Region>
                <PostCode>%s</PostCode>
                <City Code="%s">%s</City>
                <Street Code="%s">%s</Street>
                <Building>%s</Building>
                <Office>%s</Office>
            '''
            print xml_template % (region_name, index, city_code, city_name, street_code, street_name, house_number, office_number)

            # saving to Address() with plain string and coords
            address_string = u'%s, %s, %s' % (region_name, city_name, street_name)
            address_to_save = Address()

            address_to_save.address_type = 1
            address_to_save.aoguid = street_aoguid
            address_to_save.code = street_code
            address_to_save.postal_code = index
            address_to_save.housenum = house_number
            address_to_save.officenum = office_number
            address_to_save.address = address_string

            address_to_save.save()

            geo = yandex_api.geocode(settings.YANDEX_MAPS_API_KEY, address_to_save.__unicode__())
            address_to_save.latitude = geo[1]
            address_to_save.longitude = geo[0]

            address_to_save.save()

            return address_to_save
Esempio n. 13
0
 def test_geocode(self):
     pos = geocode("Москва")
     self.assertEqual(pos, (COORDS[0], COORDS[1]))