문제

이론

나는 매우 포괄적 인 좌표 목록(위도 경도 7 개 소수 자릿수),이는 나는 원하는 지속적으로 추가니다.을 중지하기 위해 데이터복제,각 협조하려고 입력되는 것,내가 원하는 데이터베이스를 검사하려면 경 위도 경도 존재하고,동일한 행입니다.

지 확인하는 경우에 존재하 좌표

 $coordinate = DB::table('coordinates')
            ->where('lat', '=', $geocode->getLatitude())
            ->where('lng', '=', $geocode->getLongitude())
            ->count();

마이그레이션

Schema::create('coordinates', function(Blueprint $table)
        {
            $table->increments('id');
            $table->float('lat', 10, 7);
            $table->float('lng', 10, 7);
            $table->timestamps();
        });

할 때 사용자의 주소로 변환 수 있다는 것을 알았을 때 dd() 위도 변수로 나온:

float(53.7960957) 코드 dd($geocode->getLatitude());

을 추가하려고 할 때 그것은 나중에 데이터베이스에 의해 제거 dd(), 실제 소수에 추가되는 데이터베이스로가 53.7960968 -는 완전히 다른 위치 때 우리가 얘기하 좌표!

왜은 소수에서 변경향에서 화면이터베이스에 추가하?

요로 변환하기 전에 떠 추가?나는 어떻게 해야 합니까?

도움이 되었습니까?

해결책

업데이트:

나는 사용하지 않은 MySQL 에서는 동안,그래서 나는 몇 가지 더 많은 연구를 한다.그것처럼 보인 decimal 유형 수있는 능력을 가지고 있는 정확한에 대한 최고 65 자리입니다.이후에만 필요한 7 자리 숫자 전달되는 소수 및 전에 3 진수,당신은 아무 문제가 있어야 만들기 있는 스키마 decimal(10,7).

SQL 바이올린


을 사용할 경우 MySQL,많은 수 있습니다.에 따라 문서, floatdouble 종류는 대략적인 표현:

플로트와 더블 형식을 나타내는 대략적인 숫자 데이터 값입니다.MySQL 사용하여 네 개의 바이트 단 하나는 정밀도 값과 팔에 대한 바이트 단위 배정밀도 값입니다.

또한 체크 아웃 SQL 바이올린, 는 것을 볼 수 MySQL5.5.32 나타내는 것입니다 부유물의 53.796095753.796100616455 고 두 배의 53.796095753.7960957.를 업데이트할 수 있습니다 당신의 스키마를 사용하여 복식 대신에 경미하게 더 많은 정밀도입니다.

지정할 수도 있습의 정밀도 플로트와 비표준 구문(으므로 권장되지 않습니다,이동성을 위한 다른 SQL 기준)사용하여 float(m,d)m 총 숫자 d 은 자리의 숫자가 소수.예를 들어,할 수 있도록 하려면 위도/경도 값(-180 180)최대 7 자리 숫자의 정밀한 후 소수신를 만들 수 있어야의 테이블 float(10,7).하지만, 당신이 볼 수, 이 여전히지 않았으로 정확한대로 두었다.

다른 팁

로 forewriter 말한다.를 사는 대신 FLOAT...

사용할 수도 있습 1E6 표기하는 것 정수장이 MySQL.

53.7960957 * 1E6 = 537960957
537960957 / 1E6 = 53.7960957

이 방법을 사용하고 저장하 geocoordinates

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top