Leaflet 根据数据库中输入的地理编码位置,显示位于地图边界内的传单标记

Leaflet 根据数据库中输入的地理编码位置,显示位于地图边界内的传单标记,leaflet,pyqt5,openstreetmap,python-3.7,Leaflet,Pyqt5,Openstreetmap,Python 3.7,我有一个GUI应用程序,其中来自数据库的数据显示在一个表上,也显示为传单地图上的标记。我已经在我的应用程序中添加了Geocode L.Control.geocoder函数,现在想从我的数据库中显示符合我的地理编码位置的地图边界的标记 我已经从传单文档中阅读了map.toBBoxString和map.getBounds,我认为我需要对数据库数据进行比较并编写查询,以显示在输入的“地理编码”位置。我的问题是,我不知道如何获取实际值并对Python查询进行比较。下面是我的搜索按钮代码的一部分,它连接到

我有一个GUI应用程序,其中来自数据库的数据显示在一个表上,也显示为传单地图上的标记。我已经在我的应用程序中添加了Geocode L.Control.geocoder函数,现在想从我的数据库中显示符合我的地理编码位置的地图边界的标记

我已经从传单文档中阅读了map.toBBoxString和map.getBounds,我认为我需要对数据库数据进行比较并编写查询,以显示在输入的“地理编码”位置。我的问题是,我不知道如何获取实际值并对Python查询进行比较。下面是我的搜索按钮代码的一部分,它连接到函数以显示用户在表格和地图上输入的数据

def search_all(self):


        print ('Searching All...')
        looking = str(self.lookall.text())       
        if looking == "":
            QMessageBox.about(self, "No Info ", " Please enter value ")         
        else :

            conn = #connection to DB

            cursor = conn.cursor()        
            query = "SELECT*FROM CT_ALL_F WHERE Lic_no LIKE  '%s' OR Licensee LIKE '%s' OR FREQ LIKE '%s' OR Power LIKE '%s' OR Installation_address LIKE '%s' OR Business_address LIKE '%s' OR Tel LIKE '%s' " %('%'+looking+'%','%'+looking+'%','%'+looking+'%','%'+looking+'%','%'+looking+'%','%'+looking+'%','%'+looking+'%')        
            cursor.execute(query)    
            results = cursor.fetchall()

            self.tableWidget.setRowCount(0)            
            for row_number, row_data in enumerate(results):                
                self.tableWidget.insertRow(row_number)                
                for column_number, data in enumerate (row_data):                                        
                    self.tableWidget.setItem(row_number,column_number,QtWidgets.QTableWidgetItem(str(data)))                    
                    pass
                pass

                coordinates = []

                for result in results:        
                    coordinates.append((result[5], result[6] ,(result[0], result[1],result[2],result[3],result[4])))


                lat_center = sum([coordinate[0] for coordinate in coordinates]) / len(coordinates)
                lng_center = sum([coordinate[1] for coordinate in coordinates]) / len(coordinates)

                html = """
                        <!DOCTYPE html>
                        <html>
                        <head>
                        <style type="text/css">
                                html { height: 100%; }
                                body { height: 100%; margin: 0; padding: 0 }
                                #mapid { height: 100% }
                        </style>
                        <link rel="stylesheet" href="https://unpkg.com/leaflet@1.3.1/dist/leaflet.css" integrity="sha512-Rksm5RenBEKSKFjgI3a41vrjkw4EVPlJ3+OiI65vTjIdo9brlAacEuKOiQ5OFh7cOI1bkDwLqdLw3Zg0cRJAAQ==" crossorigin=""/>
                        <script src="https://unpkg.com/leaflet@1.3.1/dist/leaflet.js" integrity="sha512-/Nsx9X4HebavoBvEBuyp3I7od5tA0UzAxs+j83KgC8PU0kgB4XiK4Lfe4y4cgBtaRJQEIFCW+oC506aPT2L1zw==" crossorigin=""></script>

                        <link rel="stylesheet" href="https://unpkg.com/leaflet-control-geocoder/dist/Control.Geocoder.css" />
                        <script src="https://unpkg.com/leaflet-control-geocoder/dist/Control.Geocoder.js"></script>


                        </head>
                        <body>
                        <div id="mapDiv" style="width:100%; height:100%"</div>
                        <script>

                        """

                html += "var map = L.map('mapDiv').setView([{lat}, {lng}], 10);".format(lat=lat_center, lng=lng_center)                
                html += """
                        L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
                        attribution: '&copy; <a href="https://www.icasa.org.za/">ICASA</a> <br> <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors',
                        }).addTo(map);

                        """

                for latitude, longitude , frequency in coordinates:

                    html += "var marker = L.marker([{lat}, {lng}]);\n ".format(lat=latitude, lng=longitude)                   
                    html += "var popupLocation1 = new L.LatLng({lat}, {lng});".format(lat=latitude, lng=longitude )                    
                    html += """var popupContent1 = ("License number : {freq}<br>Licensee: {dek}<br>Frequency : {lek}<br>Power : {sek}<br>Location : {mek}<br>"),""".format(freq=frequency[0],dek=frequency[1],lek=frequency[2],sek=frequency[3],mek=frequency[4])
                    html += "popup1 = new L.Popup();"
                    html += "popup1.setLatLng(popupLocation1);"
                    html += "popup1.setContent(popupContent1);"
                    html+= "marker.bindPopup(popupContent1);"
                    html += "map.addLayer(popup1).addLayer(marker);"

                    html += "L.Control.geocoder().addTo(map);</script> </body> </html>"
                self.view.setHtml(html)
在输入地理编码位置后,我希望看到位于地图地图边界内的DB标记显示在我的传单地图上


我将数据类型从Ms Access数据库更改为短文本,这使我能够使用从geocoder获得的边界框坐标从数据库结果编写比较查询。这起作用了

你能给我解释清楚吗,我不明白你想做什么。除了共享.dbI基本上还想实现以下功能:用户使用传单地理编码功能输入地图上的某个位置。然后地图就会转到那个位置。除此之外,我希望显示符合地图边界的标记。因此,如果我在DB中的Lat Long信息在地图范围内,请在地图上显示它。我将重新编辑我的问题以包含DB或添加图片我已编辑我的问题以更好地解释,因此我取得了一些进展,希望有人能帮助我进一步开始。所以我安装了geocoder python模块。现在我可以很容易地看到和检索我的地图边界框坐标。g、 东北[0],g.东北[1],g.西南[0],g.西南[1]。@eyllanesc所以,我想我只有一个障碍来完成这件事。只有一个问题。我有一个Ms Access数据库,lat/LONG表示为doubledatatype。在Python代码中,我的传单映射lat/longs表示为float。当我试图在map与db lat和longs之间编写比较查询时,我遇到了一个错误。i、 e数据不匹配类型错误