MapView zoom causes the map to be obscured

98 Views Asked by At

I have a problem with the python mapview library: kivy_garden.mapview: if I insert the zoom in the variable map = MapView(zoom=7) the map is completely obscured by a blue color as below you can see both the image and the code.

# import & from
import time
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.core.window import Window
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.image import Image
from kivy.uix.textinput import TextInput
from kivy_garden.mapview import MapView, MapMarker
from kivy.uix.popup import Popup
from pyicloud import PyiCloudService

class DeviceInfoPopup(Popup):
    def __init__(self, device_name, battery_level, altitude, **kwargs):
        super(DeviceInfoPopup, self).__init__(**kwargs)
        self.title = device_name
        self.chiudi = Button(text="Close", size_hint=(1, 0.2), background_color="#ff0000", on_press=self.dismiss)
        self.content = Label(text=f"Battery: {battery_level}%\nAltitude: {altitude}m")
        self.content.add_widget(self.chiudi)


class Locgps(App):
    def build(self):
        self.window = GridLayout()
        self.window.cols = 1
        self.window.size_hint = (0.8, 0.9)
        self.window.pos_hint = {"center_x":0.5, "center_y":0.5}
        Window.size = (360, 640)

        # create widget
        self.label1 = (Label(text="Location GPS", size_hint=(1, 0.2), font_size="30sp", padding_y="2sp"))
        self.image = Image(source="./ico.png")
        self.labelmail = (Label(text="Enter mail (iCloud)", size_hint=(1, 0.2), color="#03d3fc"))
        self.inputmail = (TextInput(size_hint=(1, 0.2)))
        self.labelpassword = (Label(text="Enter password (iCloud)", size_hint=(1, 0.2), color="#03d3fc"))
        self.inputpassword = (TextInput(size_hint=(1, 0.2)))
        self.button = (Button(text="Connect", size_hint=(1, 0.2), bold=True, background_color="#03fc17"))
        self.button.bind(on_press=self.connetti)
        self.map = MapView(size_hint=(1, 1), )


        # add widget
        self.window.add_widget(self.label1)
        self.window.add_widget(self.image)
        self.window.add_widget(self.labelmail)
        self.window.add_widget(self.inputmail)
        self.window.add_widget(self.labelpassword)
        self.window.add_widget(self.inputpassword)
        self.window.add_widget(self.button)
        self.window.add_widget(self.map)

        # display window
        return self.window

    def connetti(self, instance,):
        self.window.remove_widget(self.image)
        self.window.remove_widget(self.labelmail)
        self.window.remove_widget(self.inputmail)
        self.window.remove_widget(self.labelpassword)
        self.window.remove_widget(self.inputpassword)
        self.button.text = "Quit"
        self.button.background_color = "#fc0303"
        self.button.bind(on_press=exit)

        email = self.inputmail.text
        password = self.inputpassword.text
        if(email == "" and password == ""):
            email = "mymail"
            password="mypassword"
            
        api = PyiCloudService(email, password)
        devices = api.devices[0]

        device_name = devices.status()["deviceDisplayName"]
        device_battery = round(devices.status()["batteryLevel"]*100)
        device_latitude = devices.location()["latitude"]
        device_longitude = devices.location()["longitude"]
        device_altitude = devices.location()["altitude"]

        marker = MapMarker(lat=device_latitude, lon=device_longitude)
        self.map.add_marker(marker)
        self.map.set_zoom_at(100, device_latitude, device_longitude)
        marker.bind(on_press=lambda x: DeviceInfoPopup(device_name, device_battery, device_altitude).open())

if __name__ == '__main__':
    Locgps().run()

instead of blue there should be the map zoomed correctly with the marker marking the exact precision.

How it looks like now

I expected the map to print correctly and not be covered by the blue.

1

There are 1 best solutions below

0
On

If I replace your

self.map = MapView(size_hint=(1, 1), )

with:

    device_latitude = 41.5
    device_longitude = -87.3
    self.map = MapView(zoom=10, lat=device_latitude, lon=device_longitude)

everything seems to work. I realize that in your build() method, you don't have the lat and lon values yet, so maybe you can delay creating the MapView until you have those values.