我正在根据GPS坐标比较相同位置的价格。 所以例如我有一个带坐标的项目:
class Box(QTextBrowser):
def __init__(self, parent=None):
QTextBrowser.__init__(self, parent)
self.setContentsMargins(0, 0, 0, 0)
self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
cstring = """
QTextBrowser {
border: 0;
background-color: #<---->;
margin: 0px;
padding-left:0;
padding-top:0;
padding-bottom:0;
padding-right:0;
}
"""
ncol = randint(300000, 999999)
cstring = cstring.replace('<---->', str(ncol))
self.setStyleSheet(cstring)
self.document().contentsChange.connect(lambda: self.customGeometry())
self.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred)
self.setContentsMargins(0, 0, 0, 0)
def customGeometry(self):
if self.isVisible():
self.setFixedWidth(self.document().idealWidth())
self.setFixedHeight(self.document().size().height())
def showEvent(self, event):
self.customGeometry()
QTextBrowser.showEvent(self, event)
class MainFrame(QScrollArea):
def __init__(self, parent=None):
QScrollArea.__init__(self, parent)
container = QFrame(self)
layout = QGridLayout(container)
layout.setSpacing(0)
layout.setContentsMargins(0, 0, 0, 0)
self.show()
text = '''
<table border="0" cellspacing="0" cellpadding="5" style="background-color: rgba(119, 212, 212, 0.7);">
<tr>
<td width="100">
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
</td>
<tr>
<tr>
<td>
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
</td>
<tr>
</table>
'''
for row in range(5):
for col in range(10):
box = Box(container)
box.setText(text)
box.show()
layout.addWidget(box, row, col)
self.setWidget(container)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
ex = MainFrame()
ex.show()
sys.exit(app.exec_())
我想在我的MySQL数据库中搜索每个项目,例如那个地方500米左右。 (它不需要是圆圈,在lat: 45.815005
lng: 15.978501
上只有500米,在X
两侧都是500米)。 Y
和Lat
在我的数据库中存储为单独的列类型lng
我知道计算精确的lng和lat并不容易,但如果我错过每个站点几米,我就没事了。
这是一个非常复杂的问题,但我会感谢任何可以启动我的建议。
答案 0 :(得分:3)
考虑到半正弦公式,计算两个坐标之间的距离实际上并不困难。
SELECT
-- stuff here
, ( 6371000 * acos( cos( radians(45.815005) ) * cos( radians( stuff.lat ) ) * cos( radians( stuff.lng ) - radians(15.978501) ) + sin( radians(45.815005) ) * sin(radians(stuff.lat)) ) ) AS distance
FROM
stuff
HAVING
distance < 500
原始答案的必要变更:
原始答案中提供的常数提供了英里或公里的值。我已经改变了常量来处理米。
常量已更改为使用您的坐标。您可能希望进一步调整查询以使这些参数而不是常量。
having
表达略有变化,以反映您对500米的渴望。同样,这可能是您想要参数化的内容。