2020-10-14 16:38:48 -04:00
|
|
|
from kivymd.uix.dialog import MDInputDialog
|
2020-10-14 15:52:03 -04:00
|
|
|
from urllib import parse
|
|
|
|
from kivy.network.urlrequest import UrlRequest
|
|
|
|
from kivy.app import App
|
|
|
|
import certifi
|
|
|
|
from kivy.clock import Clock
|
|
|
|
|
|
|
|
class SearchPopupMenu(MDInputDialog):
|
|
|
|
title = 'Search by Address'
|
|
|
|
text_button_ok = 'Search'
|
|
|
|
|
2020-10-14 16:38:48 -04:00
|
|
|
def __init__(self, **kwargs):
|
|
|
|
super().__init__(**kwargs)
|
2020-10-14 15:52:03 -04:00
|
|
|
self.size_hint = [.9, .3]
|
|
|
|
self.events_callback = self.callback
|
|
|
|
|
|
|
|
def open(self):
|
|
|
|
super().open()
|
|
|
|
Clock.schedule_once(self.set_field_focus, 0.5)
|
|
|
|
|
|
|
|
def callback(self, *args):
|
|
|
|
address = self.text_field.text
|
|
|
|
self.geocode_get_lat_lon(address)
|
|
|
|
|
|
|
|
def geocode_get_lat_lon(self, address):
|
|
|
|
with open('app_id.txt', 'r') as f:
|
|
|
|
app_id = f.read()
|
|
|
|
with open('app_code.txt', 'r') as f:
|
|
|
|
app_code = f.read()
|
|
|
|
address = parse.quote(address)
|
|
|
|
url = "https://geocoder.api.here.com/6.2/geocode.json?searchtext=%s&app_id=%s&app_code=%s"%(address, app_id, app_code)
|
|
|
|
UrlRequest(url, on_success=self.success, on_failure=self.failure, on_error=self.error, ca_file=certifi.where())
|
|
|
|
|
|
|
|
def success(self, urlrequest, result):
|
|
|
|
print("Success")
|
|
|
|
latitude = result['Response']['View'][0]['Result'][0]['Location']['NavigationPosition'][0]['Latitude']
|
|
|
|
longitude = result['Response']['View'][0]['Result'][0]['Location']['NavigationPosition'][0]['Longitude']
|
|
|
|
app = App.get_running_app()
|
|
|
|
mapview = app.root.ids.mapview
|
|
|
|
mapview.center_on(latitude, longitude)
|
|
|
|
|
|
|
|
def error(self, urlrequest, result):
|
|
|
|
print("error")
|
|
|
|
print(result)
|
|
|
|
|
|
|
|
def failure(self, urlrequest, result):
|
|
|
|
print("failure")
|
|
|
|
print(result)
|