-
Notifications
You must be signed in to change notification settings - Fork 0
/
keys.py
93 lines (77 loc) · 3.23 KB
/
keys.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import numpy
from shapely.geometry import Point, Polygon
import json
from yaml import load, dump
import argparse
try:
from yaml import CLoader as Loader, CDumper as Dumper
except ImportError:
from yaml import Loader, Dumper
import simplekml
import logging
logger = logging.getLogger(name="Ingress Keys")
logger.setLevel(logging.INFO)
streamHandler = logging.StreamHandler()
formatter = logging.Formatter(f"IngressKeys::%(asctime)s - %(name)s - %(levelname)s - %(message)s")
streamHandler.setFormatter(formatter)
logger.addHandler(streamHandler)
argument_parser = argparse.ArgumentParser("keys.py")
argument_parser.add_argument("-f", dest="filename", type=str, default="example.csv",
help="Tab seperated file from inventory plugin export.",
required=True)
argument_parser.add_argument("-c", dest="config_filename", type=str, default="example_config.yml",
help="Config File for BBOX")
argument_parser.add_argument("-k", dest="kml_filename", type=str, default="output.kml",
help="KML Filename")
argument_parser.add_argument("-o", dest="keys_filename", type=str, default="all_keys.json",
help="Filename for JSON formatted output")
argument_parser.add_argument("-i", dest="poly_keys_filename", type=str, default="ploy_keys.json",
help="Filename for JSON formatted output of Keys in Polygon")
args = argument_parser.parse_args()
config_parms = load(open(args.config_filename, "r"),Loader=Loader)
fn = args.filename
fd = open(fn, "r")
lines = fd.readlines()
export_keys_dict = {"keys":[]}
for line in lines:
line = line.strip("\n")
name, lat, lon, cap, count = line.split("\t")
if cap == "\u2302":
cap = "none"
d = {
"name" : name.replace("'", ""),
"lat" : float(lat),
"lng" : float(lon),
"capsule" : cap,
"count" : int(count)
}
export_keys_dict["keys"].append(d)
keys = export_keys_dict.get("keys")
keys_in_poly = {"keys" : [] }
bbox_coords = config_parms.get("bbox")
BoundingBox = []
for vertex in bbox_coords:
LAT, LON = vertex.split(",")
LAT = float(LAT)
LON = float(LON)
BoundingBox.append( (LAT, LON) )
POLYGON = Polygon(BoundingBox)
count = 0
for key in keys:
point = Point(key.get("lat"),key.get("lng"))
if POLYGON.contains(point):
count += 1
logger.info(f"Portal \"{key.get('name')}\" is inside the Polygon")
keys_in_poly["keys"].append(key)
logger.info(f"{count} Portals were found to reside inside the Polygon")
kml = simplekml.Kml()
for portal_info in keys_in_poly.get("keys"):
kml.newpoint(name=portal_info.get("name"), coords=[(portal_info.get("lng"), portal_info.get("lat"))],description=f"Keys: {portal_info.get('count')}" )
logger.info(f"Saving KML file to {args.kml_filename}")
kml.save(args.kml_filename)
logger.info(f"Dumping Polygon Keys to {args.poly_keys_filename}")
with open(args.poly_keys_filename, "w") as outfile:
json.dump(keys_in_poly,outfile,indent=4,sort_keys=True)
logger.info(f"Dumping all Keys to {args.keys_filename}")
with open(args.keys_filename, "w") as outfile:
json.dump(export_keys_dict,outfile,indent=4,sort_keys=True)