如何从大小为10km x 10km的中心点开始创建边界框?
现在,我正如下所述。但这不是一个好的和准确的解决方案。
lng30km = 0.42 # I measured this values with google maps
lat30km = 0.27 # It is not accurate and won't work properly
minx = point.x - lng30km
miny = point.y - lat30km
maxx = point.x + lng30km
maxy = point.y + lat30km
poly = Polygon.from_bbox((minx, miny, maxx, maxy))
我想使用这个边界框,在这个边界框中找到我的MySQL数据库中的点
MyObject.objects.filter(point__within=poly
答案 0 :(得分:0)
一旦你计算了sw_lng,sw_lat,ne_lng,ne_lat
尝试这个(仅使用postgres测试)我对MySql不太确定。无论如何你应该使用PostGIS。 MySql有很多限制。
xmin = float(sw_lng)
ymin = float(sw_lat)
xmax = float(ne_lng)
ymax = float(ne_lat)
bbox = (xmin, ymin, xmax, ymax)
geom = Polygon.from_bbox(bbox)
values = use_class.objects.filter(active=True, source__coveredby=geom)
例如(未经过测试的伪代码):
geod = pyproj.Geod(ellps='WGS84')
dis = 30000 / 2
top_x, top_y, top_azi = geod.fwd(center_longitude, center_latitude, 0, dis)
right_x, right_y, right_azi = geod.fwd(center_longitude, center_latitude, 90, dis)
bottom_x, bottom_y, bottom_azi = geod.fwd(center_longitude, center_latitude, 180, dis)
left_x, left_y, left_azi = geod.fwd(center_longitude, center_latitude, 270, dis)
通过距离移动中心0,90,180,270,建立一个产生30000米的交叉。使用这种交叉线构建一个盒子,我们应该拥有它
答案 1 :(得分:0)
要精确计算给定经度 - 纬度的边界框,您需要进行测地计算。这可以通过pyproj库实现。 pyproj的详细文档是here。
通过终端中的pip安装库。
pip install pyproj
考虑到你的纬度和经度,边界框是东北,东南,西南和西北的角落。它们中的每一个都具有相应的方位角值,分别为:45,135,225和315。现在使用pyproj值,您可以执行以下操作:
from pyproj import Geod
g = Geod('clrk66') # Create a geodesic calculation object
distance = 10 * 1000 # in meters
# given latitude (lat), longitude (lon) values for the location
top_right_corner = g.fwd(lon, lat, 45, distance)
bottom_right_corner = g.fwd(lon, lat, 135, distance)
bottom_left_corner = g.fwd(lon, lat, 225, distance)
top_left_corner = g.fwd(lon, lat, 315, distance)
可以从这些角落获得盒子的边界。
max_lon = top_right_corner[0]
max_lat = bottom_right_corner[1]
min_lon = bottom_left_corner[0]
min_lat = top_left_corner[1]
您可以使用它来为边界框创建多边形。
bbox = (max_lon, max_lat, min_lon, min_lat)
geom = Polygon.from_bbox(bbox)