Добрый день, Хабр! Я давно мечтал внести свой вклад в этот замечательный проект, который читаю уже несколько лет. Но так как по образованию я не программист, то мои проекты были не такими элегантными, как представленные здесь.
Поэтому я очень долго думал над тем, что можно здесь разместить и что не будет засыпано негативными комментариями.
В результате в рамках работы возникла идея оптимизации работы сотрудников, что существенно (на мой взгляд) упростило бы жизнь.
Суть идеи в том, что есть земельные участки, на которых можно строить только частные жилые дома (Индивидуальное жилищное строительство), и запрещается использовать эти помещения для коммерческой деятельности.
Хотя в России это никого не остановило, и получается, что сотрудникам приходится ходить и проверять, что дом построен как жилой и используется как ларек.
В результате ходить нужно долго и много, плюс постоянно нужен доступ к информации, чтобы уточнить, что это за дом.
Ну или в офисе выберите адреса для проверки, а затем запрягайте верблюдов, пополняйте запасы воды и отправляйтесь в удивительное путешествие.
Потому что в наших СМИ говорят, что цифровая экономика якобы на дворе и интернет вещей вообще.
Подход в виде заглянуть в базу данных и пойти погулять как-то странно выглядит. В результате реализация идеи создания тепловой карты на основе общедоступная кадастровая карта и анализируя данные на сайте, сначала были получены данные по всем кадастровым кварталам в пределах района.
Метод добычи был не очень гуманным.
При разборе загруженных на карту тайлов все SVG файлы сохранялись, а названия блоков экспортировались из тегов описания геометрии.
В дальнейшем для каждого блока были получены все объекты в его границах.
На этапе анализа данных возникла проблема, что координаты объектов даны в формате Mercator P3857, пришлось добавить перевод в привычную систему координат с долготой и широтой.
Координаты объекта задаются в двух видах: точный центр площадки и крайние точки общей геометрии площадки.
данные JSON
Для тепловой карты я использовал первые координаты после перевода."center": { "x": 5135333.187724394, "y": 6709637.473119974 }, "extent": { "xmax": 5135346.924914406, "xmin": 5135320.375756669, "ymax": 6709666.568613776, "ymin": 6709611.5618947 }
Пока возился с картой в QGIS (которую я увидел впервые), мне в голову пришла безумная идея, что в популярных сервисах Яндекс Карты и 2ГИС можно искать объекты по координатам.
Я сразу решил проверить эту теорию.
Ведь если ввести координаты, оба сервиса выдадут информацию об этом доме.
Следовательно, напрашивается вывод, что если выбрать объекты с характеристиками только для жилищного строительства и проверить их по данным об организациях, если карты вернули список организаций, то данное здание не используется по назначению.
Первоначальная проверка проводилась по данным о центре участка, и как показала практика, данные не всегда сходились, так как участок больше дома на нем, а дом не всегда расположен посередине.
сценарий.
Но это помогло подтвердить теорию.
Я проверил в том районе, что знаю точно, что там есть частный сектор и обязательно есть небольшие магазины или услуги.
Для получения данных с карточек я использовал дурацкий Python-скрипт (сразу извиняюсь, если обидел программистов этим кодом): код import requests
import json
import time
import csv
import pyproj
from random import choice
from random import randint
from pandas import read_csv
def get_proxy():
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 8; WOW32; rv:54.0 ) Gecko/20100101 Firefox/54.0'}
proxies = open('proxy.txt').
read().
split('\n')
result=None
proxy=""
while result is None:
try:
proxy = {'http':' http://'+choice(proxies) }
r = requests.get(' http://ya.ru',headers=headers , proxies=proxy,timeout=(60, 60))
if r.status_code==200:
result=proxy
except:
pass
return proxy
def main():
headers = {
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Encoding':'gzip, deflate',
'Accept-Language':'ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4',
'Cache-Control':'max-age=0',
'Connection':'keep-alive',
'Cookie':'_ym_uid=1495451406361935235; _ym_isad=1; topCities=43-2; _2gis_webapi_session=0faa6497-0004-47c5-86d8-3bf9677f972a; _2gis_webapi_user=7e256d33-4c6e-44ab-a219-efc71e2d330f',
'DNT':'1',
'Host':'catalog.api.2gis.ru',
'Upgrade-Insecure-Requests':'1',
'User-Agent':'Mozilla/5.0 (Windows NT 7; WOW32; rv:54.0 ) Gecko/20100101 Firefox/54.0',
'X-Compress':'null'
}
print("start")
csvfile = open('GetShopsByCoordinats.csv', 'a', newline='')
fieldnames = ['id', 'x','y','shops','names']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames, delimiter=';', quotechar='|',)
writer.writeheader()
inputCSV = read_csv('for2GIS.csv', sep=';', skiprows=[0], header=None)
for i in range (0,5):
s= 'point='+str(inputCSV[1][i])+'%2C'+str(inputCSV[2][i])+'&fields=search_attributes%2Citems.links&key=rutnpt3272'
print (s)
with requests.Session() as session:
r=session.get(' https://catalog.api.2gis.ru/2.0/geo/search?'+s , headers=headers,timeout=(60, 60))
JsonData = r.json()
try:
print(JsonData['result']['items'][0]['links']['branches']['count'])
writer.writerow({'id': str(inputCSV[0][i]),'x': str(inputCSV[1][i]), 'y': str(inputCSV[2][i]), 'shops': JsonData['result']['items'][0]['links']['branches']['count'] })
except:
writer.writerow({'id': str(inputCSV[0][i]),'x': str(inputCSV[1][i]), 'y': str(inputCSV[2][i]), 'shops': 'none' })
time.sleep(randint(1,3))
csvfile.close()
print ('fin')
if __name__=='__main__':
main()
В результате получился файл, в котором были отражены все проверяемые объекты с кадастровым номером и координатами центра участка и данными с сайта о количестве магазинов в данной точке.
Сами имена и контактные данные были не нужны.
Тривиальный автофильтр в Excel по столбцу с числом магазинов больше 0 и получаем список потенциальных нарушителей; вам просто нужно пройтись по уже «проверенным» адресам.
В планах на будущее поиск не по точке а в радиусе границ сайта, вроде такая возможность есть в API. А если количество выявленных объектов достаточно, то можно даже создать построитель оптимальных маршрутов и шаблонов отчетов о проверках на основе имеющихся данных.
В результате получается очень простая система, позволяющая сотрудникам не просто ходить, а проверять только необходимые объекты.
После подтверждения выявленных объектов и при необходимости корректировки алгоритма вы можете формировать списки для проверки автоматически, просто выделив на карте необходимую зону проверки.
Что касается загрузки данных, то теперь для загрузки получен легальный ключ API. Теги: #python #теория тестирования #оптимизация #python
-
Роуфут-Ходжкин, Дороти
19 Oct, 24 -
Топ-3 Способа Получить Больше Спама
19 Oct, 24 -
Помогите Снежинке Стать Программистом
19 Oct, 24 -
Радости Жизни Часть 2.5
19 Oct, 24