Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php lat长半径搜索(来自邮政编码)_Php_Latitude Longitude - Fatal编程技术网

php lat长半径搜索(来自邮政编码)

php lat长半径搜索(来自邮政编码),php,latitude-longitude,Php,Latitude Longitude,我在stack overflow和其他地方读过这篇文章,并试图编写一些代码来完成我需要的工作。我将有一个邮政编码(为了测试的目的,它是固定在28752),我希望网页给我的位置在50英里的邮政编码。我读到的大部分内容都让我摸不着头脑,但我把以下内容拼凑在一起,就我有限的知识而言,它应该是可行的(给我一个参数内的记录列表),但它不是 首先,我使用以下设置参数 $zipcode="28752"; $url = "http://maps.googleapis.com/maps/api/geocode/j

我在stack overflow和其他地方读过这篇文章,并试图编写一些代码来完成我需要的工作。我将有一个邮政编码(为了测试的目的,它是固定在28752),我希望网页给我的位置在50英里的邮政编码。我读到的大部分内容都让我摸不着头脑,但我把以下内容拼凑在一起,就我有限的知识而言,它应该是可行的(给我一个参数内的记录列表),但它不是

首先,我使用以下设置参数

$zipcode="28752";
$url = "http://maps.googleapis.com/maps/api/geocode/json?address=".$zipcode."&sensor=false";
$details=file_get_contents($url);
$result = json_decode($details,true);

$lat=$result['results'][0]['geometry']['location']['lat'];

$lng=$result['results'][0]['geometry']['location']['lng'];

$range = 50;  

       // Find Max - Min Lat / Long for Radius and zero point and query  
       $lat_range = $range/69.172;  
       $lon_range = abs($range/(cos($latitude) * 69.172));  
       $min_lat = number_format($lat - $lat_range, "4", ".", "");  
       $max_lat = number_format($lat + $lat_range, "4", ".", "");  
       $min_lon = number_format($lng - $lon_range, "4", ".", "");  
       $max_lon = number_format($lng + $lon_range, "4", ".", "");  
然后我设置sql查询如下

$LA1_RESULTS = "-1";
if (isset($min_lat)) {
$LA1_RESULTS = $min_lat;
}
$LO1_RESULTS = "-1";
if (isset($min_long)) {
$LO1_RESULTS = $min_long; 
}
$LO2_RESULTS = "-1";
if (isset($max_long)) {
$LO2_RESULTS = $max_long;
}
$LA2_RESULTS = "-1";
if (isset($max_lat)) {
$LA2_RESULTS = $max_lat;
}
mysql_select_db($database_XMASTREE, $XMASTREE);
$query_RESULTS = sprintf("SELECT * FROM zip_code WHERE zip_code.latitude BETWEEN %s AND      %s AND zip_code.longitude BETWEEN %s AND %s", GetSQLValueString($LA1_RESULTS, "int"),GetSQLValueString($LA2_RESULTS, "int"),GetSQLValueString($LO1_RESULTS, "int"),GetSQLValueString($LO2_RESULTS, "int"));
$RESULTS = mysql_query($query_RESULTS, $XMASTREE) or die(mysql_error());
$row_RESULTS = mysql_fetch_assoc($RESULTS);
$totalRows_RESULTS = mysql_num_rows($RESULTS);
可以在正确给出lat和long变量的位置看到输出。我已将数据库中的lat和long设置为十进制(小数点后6位)


我是原来的“只知道足够危险”!有人能找出我做错了什么吗?

试着将小数点设置为8位。

你知道这种方法会返回边为50的正方形中的点,而不是半径为50的圆吗

基本的数学知识包含在本课程中

因此,您可以让服务器完成大部分工作,而不是计算地理点的最大/最小值:

SELECT * 
FROM zip_code 
WHERE 
    (
        POWER(latitude - "INPUT LATITUDE", 2) 
        + 
        POWER(longitude - "INPUT LONGITUDE", 2) 
    ) 
    < POWER("RADIUS",2)
选择*
来自邮政编码
哪里
(
功率(纬度-“输入纬度”,2)
+ 
功率(经度-“输入经度”,2)
) 
<功率(“半径”,2)

感谢所有回复的人。让它像您的解决方案看起来那样复杂,这让我很难理解,它一直告诉我有一个编码错误。因为这是一个非常小的数据库(只有30条记录),我实际上查找了半径范围内的邮政编码,并将它们作为列表添加到单独的字段中。然后,我能够在有限的知识范围内创建搜索参数。我真的很感谢你们的回答!我的非技术解决方案可能会让你发笑!我使用DW CS6添加了查询,它告诉我$query_ZIPLOCATE=“SELECT*FROM MEMBERS WHERE(POWER(latitude—“INPUT latitude”,2)+POWER(longitude—“INPUT longitude”,2))$lat
$lng
)以及搜索半径(即
$range/69.172