Latitudeを参照してください。& Longitudeは既にデータベースに存在します。私は人々が彼らの物理的なアドレスを入力することができ、マップ上に表示されるウェブサイトを持っています。私は物理的なアドレスが二度入力されるのを防ぎたい。これを行う最善の方法は、Latitude &の経度とデータベースに格納されているものとを比較することです。Latitiude&Longitudeがデータベースに存在するかどうか確認してください
私はGoogle Map APIを使用してLatitudeを探しています&ユーザーが入力した住所の経度です。 Googleの推奨に従って、これらの値を浮動小数点(10,6)の値として保存(キャッシング)しています。
私が経験している問題は、ユーザーが入力したアドレスの値とデータベースに格納されている値を比較しようとすると浮動小数点値が丸められてしまうようです。ここで
は、私は、これらの値を比較するために使用していたコードです:
$url = "http://maps.googleapis.com/maps/api/geocode/json?sensor=false&address=".urlencode($address);
$lat_long = get_object_vars(json_decode(file_get_contents($url)));
// pick out what we need (lat,lng)
$lat = $lat_long['results'][0]->geometry->location->lat;
$lng = $lat_long['results'][0]->geometry->location->lng;
// Check to see if Property is already in database
$getlatlng = sprintf("SELECT * FROM `Property` WHERE CAST(lat AS DECIMAL(10,6)) = CAST(%s AS DECIMAL(10,6)) AND CAST(lng AS DECIMAL(10,6)) = CAST(%s AS DECIMAL(10,6))",
$PDO_DB->quote($lat),
$PDO_DB->quote($lng));
$resultlatlng = $PDO_DB->query($getlatlng);
$rowlatlng = $resultlatlng->fetch(PDO::FETCH_ASSOC);
本の例では、アドレスのようになります。データベースに格納されている601 N Lincoln Rd, Escanaba, MI 49829
値は次のとおりです。
lat = 45.752487
lng = -87.082733
Google Map APIから返される値は、
です。私の推測では、値はから返されるとしなければならないがに丸められている:
lat = 45.752488
lng = -87.082734
そして、これは私が私のデータベースを持っているとどのようなGoogleが返す等しくないことになります。データベースに格納されている値は、上記のコードと同じコードに格納され、データベースに値を挿入しているセクションの外に置かれます。
お読みいただきありがとうございました。
http://php.net/manual/en/function.bccomp.phpまたはhttp://php.net/manual/en/function.gmp- cmp.php – Aaron
小数点以下6桁のみを格納します。ここで、(M、D)は、M桁までの値を格納することができることを意味し、D桁は小数点以下になる可能性があります。たとえば、FLOAT(7,4)として定義された列は、表示されるときに-999.9999のようになります。 MySQLは値を格納するときに丸めを行います。したがって、FLOAT(7,4)カラムに999.00009を挿入すると、おおよその結果は999.0001です。-http://dev.mysql.com/doc/refman/5.7/en/floating- point-types.html – chris85
このフィールドの値を変更すると、MySQL内でFLOAT(11,7)に保存されますか? –