我有一个 2 天的紧缩截止日期(我知道我自己的撤消),我需要在 Wordpress 中实现一个函数,该功能搜索一堆带有自定义内容的帖子,其中包含wp_postmeta中已知字段中的位置(未地理编码),并根据与特定地理编码的邻近程度(即 20 英里内)显示它们的列表。
我对 WP 查询没有问题 - 我只是对 Google Map API 有点陌生,而且文档在地理编码方面并不是非常简单,我认为我必须这样做来确定邻近性。
此外,我假设我只需要遍历每个帖子的列表,并一次确定它们是否满足邻近性要求。
我不是要求别人为我做这件事,除非你付钱为我做这件事 - 我只需要迅速指出正确的方向。 我找不到任何知道如何做到这一点的人 - 而且我有一些预算......
前我在研究类似的东西。如何使用快速SQL查询处理4M地理位置记录数据库。
这个页面+这个pdf有帮助。
取决于您在数据库中存储的内容,但每次遍历每个帖子都会很慢。您需要将地理位置查询卸载到 SQL 级别。
PS:我知道只有链接的回复是不受欢迎的...
这里有两个入门脚本,您需要修改它们
.PHP
function buildGeocode($address_1, $address_2, $city, $state, $zip_code, $country){
$base_url = "http://maps.googleapis.com/maps/api/geocode/json";
$address = $address_1 . ' ' . $address_2 . ', ' . $city . ' ' . $state . ' ' . $zip_code . ' ' . $country;
$request_url = $base_url . "?address=" . urlencode($address) . "&sensor=false";
$data = json_decode(file_get_contents($request_url), true);
return array('lat' => $data['results'][0]['geometry']['location']['lat'], 'lng' => $data['results'][0]['geometry']['location']['lng']);
}
MySQL
"SELECT SQL_CALC_FOUND_ROWS
*
FROM (SELECT location_tbl.*, ( 3959*(2*ASIN(SQRT(POW(SIN(((location_tbl.lat-" . $lat . ")*(PI()/180))/2),2)+COS(location_tbl.lat*0.017453293)*COS(" . $lat . "*0.017453293)*POW(SIN(((location_tbl.lng-" . $lng . ")*(PI()/180))/2),2)))) ) AS distance
FROM location_tbl
WHERE location_tbl.active = 1 AND location_tbl.deleted = 0) AS tmp_tbl
WHERE distance <= '" . $dis . "'
ORDER BY distance ASC"