PHP 및 SQL : Haversine 공식을 사용하여 위도와 경도 지점 간의 대원 거리 계산 또는 쿼리

Haversine 공식-PHP 또는 MySQL로 대원 거리 계산

이번 달에는 GIS와 관련하여 PHP와 MySQL에서 꽤 많은 프로그래밍을했습니다. 인터넷을 스누핑하면서 실제로 일부를 찾기가 어려웠습니다. 지리적 계산 두 위치 사이의 거리를 알아 내기 위해 여기서 공유하고 싶었습니다.

Great Circle Distance와 비행지도 유럽

두 점 사이의 거리를 계산하는 간단한 방법은 피타고라스 공식을 사용하여 삼각형의 빗변을 계산하는 것입니다 (A² + B² = C²). 이것은 유클리드 거리.

그것은 흥미로운 시작이지만 위도와 경도 선 사이의 거리가 있기 때문에 지리학에는 적용되지 않습니다. 같은 거리가 아니다 떨어져서. 적도에 가까워 질수록 위 도선은 더 멀어집니다. 어떤 종류의 간단한 삼각 측량 방정식을 사용하면 지구의 곡률로 인해 한 위치에서는 거리를 정확하게 측정하고 다른 위치에서는 매우 잘못 측정 할 수 있습니다.

그레이트 서클 거리

지구 주위를 먼 거리를 여행하는 경로는 그레이트 서클 거리. 즉 ... 구에서 두 점 사이의 최단 거리는 평면지도의 점과 다릅니다. 위도와 경도선이 등거리가 아니라는 사실과 결합하면 ... 어려운 계산이 있습니다.

Great Circles의 작동 방식에 대한 환상적인 비디오 설명이 있습니다.

Haversine 공식

지구의 곡률을 사용하는 거리는 Haversine 공식, 삼각법을 사용하여 지구의 곡률을 허용합니다. (까마귀가 날아갈 때) 지구상의 두 장소 사이의 거리를 찾을 때 직선은 실제로 호입니다.

이것은 항공 비행에 적용 할 수 있습니다. 비행의 실제지도를보고 아치형으로되어있는 것을 본 적이 있습니까? 그 위치로 직접가는 것보다 두 지점 사이의 아치에서 비행하는 것이 더 짧기 때문입니다.

PHP : 위도와 경도의 두 지점 사이의 거리 계산

어쨌든, 소수점 이하 두 자리로 반올림 한 두 지점 사이의 거리 (마일 대 킬로미터 변환과 함께)를 계산하는 PHP 공식이 있습니다.

function getDistanceBetweenPointsNew($latitude1, $longitude1, $latitude2, $longitude2, $unit = 'miles') {
  $theta = $longitude1 - $longitude2; 
  $distance = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2))) + (cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * cos(deg2rad($theta))); 
  $distance = acos($distance); 
  $distance = rad2deg($distance); 
  $distance = $distance * 60 * 1.1515; 
  switch($unit) { 
    case 'miles': 
      break; 
    case 'kilometers' : 
      $distance = $distance * 1.609344; 
  } 
  return (round($distance,2)); 
}

SQL : 위도와 경도를 사용하여 거리를 마일 단위로 계산하여 범위 내의 모든 레코드 검색

SQL을 사용하여 특정 거리 내의 모든 레코드를 찾는 계산을 수행 할 수도 있습니다. 이 예에서는 MySQL의 MyTable을 쿼리하여 $ latitude 및 $ longitude의 내 위치까지의 $ distance (마일 단위) 변수보다 작거나 같은 모든 레코드를 찾습니다.

특정 데이터 내의 모든 레코드를 검색하기위한 쿼리 거리 위도와 경도의 두 지점 사이의 거리를 마일로 계산하면 다음과 같습니다.

$query = "SELECT *, (((acos(sin((".$latitude."*pi()/180)) * sin((`latitude`*pi()/180)) + cos((".$latitude."*pi()/180)) * cos((`latitude`*pi()/180)) * cos(((".$longitude."- `longitude`)*pi()/180)))) * 180/pi()) * 60 * 1.1515) as distance FROM `table` WHERE distance <= ".$distance."

이를 사용자 정의해야합니다.

  • $ longitude – 이것은 내가 지점의 경도를 전달하는 PHP 변수입니다.
  • $ latitude – 이것은 내가 지점의 경도를 전달하는 PHP 변수입니다.
  • $ 거리 – 이것은 모든 레코드를 더 작거나 같게 찾으려는 거리입니다.
  • 테이블 – 이것은 테이블입니다. 테이블 이름으로 바꾸고 싶을 것입니다.
  • 위도 – 이것은 당신의 위도 필드입니다.
  • 경도 – 이것은 당신의 경도의 필드입니다.

SQL : 위도와 경도를 사용하여 킬로미터 단위의 거리를 계산하여 범위 내의 모든 레코드 검색

다음은 MySQL에서 킬로미터를 사용하는 SQL 쿼리입니다.

$query = "SELECT *, (((acos(sin((".$latitude."*pi()/180)) * sin((`latitude`*pi()/180)) + cos((".$latitude."*pi()/180)) * cos((`latitude`*pi()/180)) * cos(((".$longitude."- `longitude`) * pi()/180)))) * 180/pi()) * 60 * 1.1515 * 1.609344) as distance FROM `table` WHERE distance <= ".$distance."

이를 사용자 정의해야합니다.

  • $ longitude – 이것은 내가 지점의 경도를 전달하는 PHP 변수입니다.
  • $ latitude – 이것은 내가 지점의 경도를 전달하는 PHP 변수입니다.
  • $ 거리 – 이것은 모든 레코드를 더 작거나 같게 찾으려는 거리입니다.
  • 테이블 – 이것은 테이블입니다. 테이블 이름으로 바꾸고 싶을 것입니다.
  • 위도 – 이것은 당신의 위도 필드입니다.
  • 경도 – 이것은 당신의 경도의 필드입니다.

저는이 코드를 북미 전역에 걸쳐 1,000 개가 넘는 소매점에 활용 한 엔터프라이즈 매핑 플랫폼에서 활용했으며 훌륭하게 작동했습니다.

댓글 76

  1. 1

    공유 해주셔서 감사합니다. 이것은 쉬운 복사 및 붙여 넣기 작업이었으며 훌륭하게 작동합니다. 당신은 저에게 많은 시간을 절약했습니다.
    C로 이식하는 모든 사용자를위한 참고 :
    double deg2rad (double deg) {return deg * (3.14159265358979323846 / 180.0); }

  2. 2

    아주 멋진 게시물 – 아주 훌륭하게 작동했습니다 – 위도를 잡고있는 테이블의 이름 만 변경하면되었습니다. 그것은 꽤 빠르게 작동합니다 .. 나는 합리적으로 적은 수의 lat-longs (<400)를 가지고 있지만 이것이 잘 확장 될 것이라고 생각합니다. 좋은 사이트도 – 방금 del.icio.us 계정에 추가했으며 정기적으로 다시 확인하겠습니다.

  3. 4
  4. 5
  5. 8

    나는 당신의 SQL에 진술이 필요하다고 생각합니다.
    WHERE distance <= $ distance 대신에
    HAVING 거리 사용 <= $ distance

    그렇지 않으면 많은 시간과 에너지를 절약 해주셔서 감사합니다.

  6. 10
  7. 11
  8. 12

    이 코드를 공유해 주셔서 감사합니다. 개발 시간을 많이 절약했습니다. 또한 MySQL 5.x에 HAVING 문이 필요하다고 지적 해 주신 독자 여러분 께 감사드립니다. 매우 유용합니다.

  9. 14
  10. 15

    안녕하세요

    다른 질문. 아래와 같은 NMEA 문자열에 대한 공식이 있습니까?

    1342.7500, N, 10052.2287, E

    $GPRMC,032731.000,A,1342.7500,N,10052.2287,E,0.40,106.01,101106,,*0B

    감사합니다,
    괴롭히다

  11. 16

    나는 또한 WHERE가 나를 위해 작동하지 않는다는 것을 발견했습니다. HAVING으로 변경하면 모든 것이 완벽하게 작동합니다. 처음에는 주석을 읽지 않고 중첩 선택을 사용하여 다시 작성했습니다. 둘 다 잘 작동합니다.

  12. 17
  13. 18

    대단히 도움이되었습니다. 대단히 감사합니다! 나는 "WHERE"가 아닌 새로운 "HAVING"에 약간의 문제가 있었지만, 여기에서 코멘트를 읽은 후 (약 XNUMX 분의 좌절감에 이빨을 갈아서 = P), 잘 작동하게되었습니다. 감사합니다 ^ _ ^

  14. 19
  15. 20

    이와 같은 select 문은 계산량이 매우 많아 느리다는 점을 명심하십시오. 이러한 쿼리가 많으면 작업이 매우 빠르게 중단 될 수 있습니다.

    훨씬 덜 집중적 인 접근 방식은 계산 된 거리로 정의 된 SQUARE 영역을 사용하여 첫 번째 (조잡한) 선택을 실행하는 것입니다. 즉, "select * from tablename where latitude between lat1 and lat2 and longitude between lon1 and lon2". lat1 = targetlatitude – latdiff, lat2 = targetlatitude + latdiff, lon과 유사합니다. latdiff ~ = 거리 / 111 (km) 또는 위도 69 도가 ~ 1km이므로 거리 / 111 (지구가 약간 타원형이지만이 목적에 충분 함). londiff = 거리 / (abs (cos (deg2rad (latitude)) * 111)) — 또는 마일의 경우 69 (실제로 변동을 고려하기 위해 약간 더 큰 사각형을 사용할 수 있음). 그런 다음 그 결과를 가져 와서 방사형 선택에 넣습니다. 경계를 벗어난 좌표를 고려하는 것을 잊지 마십시오. 예를 들어 허용되는 경도 범위는 -180에서 +180이고 허용되는 위도 범위는 -90에서 +90입니다. latdiff 또는 londiff가이 범위를 벗어나는 경우 . 대부분의 경우 이것은 chukotka의 일부와 알래스카의 일부를 교차하지만 극에서 극까지 태평양을 통과하는 선을 통한 계산에만 영향을 미치기 때문에 적용되지 않을 수 있습니다.

    이를 통해 우리가 달성 한 것은이 계산을 수행하는 포인트 수를 크게 줄인 것입니다. 데이터베이스에 100 만 개의 글로벌 포인트가 대략 균등하게 분포되어 있고 10000km 이내에서 검색하려는 경우 첫 번째 (빠른) 검색은 20 평방 km 영역에 대한 것이며 아마도 약 500 개의 결과를 산출 할 것입니다 ( 표면적은 약 20M sq km)이므로이 쿼리에 대해 복잡한 거리 계산을 백만 번이 아닌 XNUMX 번 실행합니다.

    • 21
      • 22

        환상적인 조언! 저는 실제로 내부 사각형을 끌어 당기는 함수를 작성한 다음 나머지 점을 포함 및 제외하기 위해 둘레를 '사각형'으로 만드는 재귀 함수를 작성한 개발자와 함께 작업했습니다. 그 결과는 믿을 수 없을 정도로 빠른 결과였습니다. 그는 마이크로 초 내에 수백만 포인트를 평가할 수있었습니다.

        위의 접근 방식은 확실히 '조잡하지만'유능합니다. 다시 한 번 감사드립니다!

        • 23

          더그,

          나는 위도 지점이 다각형 내에 있는지 평가하기 위해 mysql과 PHP를 사용하려고 노력해 왔습니다. 개발자 친구가이 작업을 수행하는 방법에 대한 예제를 게시했는지 알고 있습니까? 아니면 좋은 예를 알고 있습니까? 미리 감사드립니다.

  16. 24

    안녕하세요, 이것은 내 테스트 SQL 문입니다.

    SELECT DISTINCT area_id, (
    (
    (
    acos( sin( ( 13.65 * pi( ) /180 ) ) * sin( (
    `lat_dec` * pi( ) /180 ) ) + cos( ( 13.65 * pi( ) /180 ) ) * cos( (
    `lat_dec` * pi( ) /180 )
    ) * cos( (
    ( 51.02 - `lon_dec` ) * pi( ) /180 )
    )
    )
    ) *180 / pi( )
    ) *60 * 1.1515 * 1.609344
    ) AS distance
    FROM `post_codes` WHERE distance <= 50

    그리고 Mysql은 거리, 열로 존재하지 않는다고 말하고 있습니다. 나는 order by를 사용할 수 있습니다. WHERE 없이도 할 수 있지만 작동하지만 작동하지는 않습니다.

  17. 26

    이것은 훌륭하지만 새들이 날아가는 것과 같습니다. 다른 형태의 교통 수단을 사용하여 아이디어를 제공하기 위해 Google지도 API를 어떻게 든 여기에 통합하는 것이 좋습니다. 나는 아직 여행하는 세일즈맨 문제에 대한 효율적인 솔루션을 제공 할 수있는 시뮬레이션 된 어닐링 기능을 PHP로 아직 만들지 않았다. 그러나 나는 당신의 코드 중 일부를 재사용 할 수 있다고 생각합니다.

  18. 27

    하이 더글라스,
    이 기사를 보내 주셔서 감사합니다. 시간을 많이 절약 해 주셨습니다.
    돌봐,
    nimrod @ 이스라엘

  19. 28

    좋은 기사! 두 지점 사이의 거리를 계산하는 방법을 설명하는 많은 기사를 찾았지만 실제로 SQL 스 니펫을 찾고있었습니다.

  20. 29
  21. 30
  22. 31
  23. 32
  24. 36

    내 문제를 해결하는이 페이지를 찾기 위해 2 일 동안 조사했습니다. WolframAlpha를 제거하고 수학을 연습하는 것이 더 나을 것 같습니다. WHERE에서 HAVING으로 변경하면 스크립트가 작동합니다. 감사합니다

  25. 37
    • 38

      감사합니다 Georgi. '거리'열을 찾을 수 없습니다. WHERE를 HAVING으로 변경하면 매력처럼 작동했습니다!

  26. 39

    나는 이것이 내가 이것에서 찾은 첫 번째 페이지 였으면 좋겠다. 많은 다른 명령을 시도한 후 이것이 제대로 작동하고 내 데이터베이스에 맞게 최소한의 변경이 필요한 유일한 명령이었습니다.
    많이 감사합니다!

  27. 40

    나는 이것이 내가 이것에서 찾은 첫 번째 페이지 였으면 좋겠다. 많은 다른 명령을 시도한 후 이것이 제대로 작동하고 내 데이터베이스에 맞게 최소한의 변경이 필요한 유일한 명령이었습니다.
    많이 감사합니다!

  28. 41
  29. 42
  30. 43
  31. 45
  32. 46
  33. 47

    이 공식이 작동한다는 것을 알고 있지만 지구의 반경이 고려되는 곳을 볼 수 없습니다. 누구든지 나를 깨달을 수 있습니까?

  34. 49
  35. 50
  36. 52
  37. 53
  38. 55
  39. 56

    Douglas,이 놀라운 코드에 감사드립니다. 내 GPS 커뮤니티 포털에서이 작업을 수행하는 방법에 대해 머리를 깨고있었습니다. 당신은 저에게 시간을 절약했습니다.

  40. 58

    이 유용한 기사를 게시 해 주셔서 감사합니다.  
    하지만 어떤 이유에서인지 물어보고 싶습니다
    mysql db 내부의 좌표와 사용자가 PHP에 삽입 한 좌표 사이의 거리를 얻는 방법은 무엇입니까?
    더 명확하게 설명하려면 :
    1. 사용자는 db와 사용자 자신의 좌표에서 지정된 데이터를 선택하기 위해 [id]를 입력해야합니다.
    2. PHP 파일은 [id]를 사용하여 목표 데이터 (좌표)를 얻은 다음 사용자와 목표 지점 사이의 거리를 계산합니다.

    또는 단순히 아래 코드에서 거리를 얻을 수 있습니까?

    $ qry = "SELECT *, (((acos (sin ((". $ latitude. "* pi () / 180))) * sin ((`Latitude` * pi () / 180)) + cos ((". $ latitude.”* pi () / 180)) * cos ((`Latitude` * pi () / 180)) * cos ((( ". $ longitude."-`Longitude`) * pi () / 180) ))) * 180 / pi ()) * 60 * 1.1515 * 1.609344) from`MyTable` WHERE distance> =“. $ distance.” >>>> 여기에서 거리를 "제거"할 수 있습니까?
    다시 한 번 감사합니다.
    티미 S

    • 59

      신경 쓰지 마세요, PHP에서 "기능"이 어떻게 작동하는지 알아 냈습니다.
      $ dis = getDistanceBetweenPointsNew ($ userLati, $ userLongi, $ lati, $ longi, $ unit = 'Km')
      고마워요 !! 

  41. 60

    좋아, 내가 시도한 모든 것이 작동하지 않습니다. 내 말은, 내가 가지고있는 것은 작동하지만 거리는 멀다.

    누구든지이 코드의 문제점을 볼 수 있습니까?

    if (isset ($ _ POST [ 'submitted'])) {$ z = $ _POST [ 'zipcode']; $ r = $ _POST [ '반지름']; echo““. $ z에 대한 결과; $ sql = mysql_query (“SELECT DISTINCT m.zipcode, m.MktName, m.LocAddSt, m.LocAddCity, m.LocAddState, m.x1, m.y1, m.verified, z1.lat, z2.lon, z1. city, z1.state FROM mrk m, zip z1, zip z2 WHERE m.zipcode = z1.zipcode AND z2.zipcode = $ z AND (3963 * acos (truncate (sin (z2.lat / 57.2958) * sin (m. y1 / 57.2958) + cos (z2.lat / 57.2958) * cos (m.y1 / 57.2958) * cos (m.x1 / 57.2958 – z2.lon / 57.2958), 8))) <= $ r ") 또는 die (mysql_error ()); while ($ row = mysql_fetch_array ($ sql)) {$ store1 = $ row [ 'MktName']. "”; $ store = $ row [ 'LocAddSt'].””; $ store. = $ row [ 'LocAddCity'].”,“. $ row [ 'LocAddState'].” “. $ row [ 'zipcode']; $ latitude1 = $ row [ 'lat']; $ longitude1 = $ row [ 'lon']; $ latitude2 = $ row [ 'y1']; $ longitude2 = $ row [ 'x1']; $ city = $ row [ 'city']; $ 상태 = $ row [ '상태']; $ dis = getnew ($ latitude1, $ longitude1, $ latitude2, $ longitude2, $ unit = 'Mi'); // $ dis = distance ($ lat1, $ lon1, $ lat2, $ lon2); $ verified = $ row [ 'verified']; if ($ verified == '1') {echo“”; echo“”. $ store.””; echo $ dis. "마일 거리"; echo ""; } else {echo“”. $ store.””; echo $ dis. "마일 거리"; echo ""; }}}

    내 functions.php 코드
    function getnew ($ latitude1, $ longitude1, $ latitude2, $ longitude2, $ unit = 'Mi') {$ theta = $ longitude1 – $ longitude2; $ distance = (sin (deg2rad ($ latitude1)) * sin (deg2rad ($ latitude2))) + (cos (deg2rad ($ latitude1)) * cos (deg2rad ($ latitude2)) * cos (deg2rad ($ theta)) ); $ distance = acos ($ distance); $ distance = rad2deg ($ distance); $ distance = $ distance * 60 * 1.1515; switch ($ unit) {case 'Mi': break; case 'Km': $ distance = $ distance * 1.609344; } return (round ($ distance, 2)); }

    사전에 감사합니다

  42. 61
  43. 62

    안녕 Douglas, 훌륭한 기사. 지리적 개념과 코드에 대한 설명이 정말 흥미로 웠습니다. 내 유일한 제안은 표시 할 코드 (예 : Stackoverflow)를 공백으로 만들고 들여 쓰는 것입니다. 나는 당신이 공간을 절약하기를 원한다는 것을 이해하지만, 전통적인 코드 간격 / 들여 쓰기는 프로그래머로서 내가 읽고 분석하는 것을 훨씬 더 쉽게 만들어 줄 것입니다. 어쨌든 그것은 작은 일입니다. 앞으로도 힘써주세요.

  44. 64
  45. 65

    여기서 함수를 사용하는 동안 우리는 한 가지 유형의 거리를 얻습니다. 쿼리를 사용하는 동안 다른 유형의 거리

  46. 66
  47. 67
  48. 68
  49. 69
  50. 70

    선택에서 공식을 두 배로 사용하는 것이 더 빠릅니다 (mysql 5.9).
    $ formula =“(((acos (sin (( ". $ latitude."* pi () / 180)) * sin ((`Latitude` * pi () / 180)) + cos (( ". $ latitude. ”* pi () / 180)) * cos ((`Latitude` * pi () / 180)) * cos ((( ". $ longitude."-`Longitude`) * pi () / 180)))) * 180 / pi ()) * 60 * 1.1515 * 1.609344)”;
    $ sql = 'SELECT *,'. $ formula. ' 테이블 WHERE '.. $ formula.' <= '. $ distance;

  51. 71
  52. 72

    이 글을 읽어 주셔서 감사합니다.
    PHP는 처음에 "개인 홈페이지"라는 간단한 스크립팅 플랫폼으로 만들어졌습니다. 오늘날 PHP (Hypertext Preprocessor의 약자)는 Microsoft의 ASP (Active Server Pages) 기술의 대안입니다.

    PHP는 동적 웹 페이지를 만드는 데 사용되는 오픈 소스 서버 측 언어입니다. HTML에 삽입 할 수 있습니다. PHP는 일반적으로 Linux / UNIX 웹 서버에서 MySQL 데이터베이스와 함께 사용됩니다. 아마도 가장 인기있는 스크립팅 언어 일 것입니다.

  53. 73

    위의 솔루션이 제대로 작동하지 않음을 발견했습니다.
    다음으로 변경해야합니다.

    $ qqq = "SELECT *, (((acos (sin ((". $ latitude. "* pi () / 180))) * sin ((`latt` * pi () / 180)) + cos ((". $ latitude. "* pi () / 180)) * cos ((`latt` * pi () / 180)) * cos (((". $ longitude. "-`longt`) * pi () / 180) ))) * 180 / pi ()) * 60 * 1.1515) as distance FROM`register` ";

  54. 75
  55. 76

    안녕하세요, 제발 당신의 도움이 정말로 필요합니다.

    내 웹 서버에 가져 오기 요청을했습니다. http://localhost:8000/users/findusers/53.47792/-2.23389/20/
    53.47792 = $ latitude
    -2.23389 = $ longitude
    그리고 20 = 내가 검색하려는 거리

    그러나 수식을 사용하면 내 db의 모든 행을 검색합니다.

    $ results = DB :: select (DB :: raw ( "SELECT *, (((acos (sin ((". $ latitude. "* pi () / 180))) * sin ((lat * pi () / 180 )) + cos (( ". $ latitude."* pi () / 180)) * cos ((lat * pi () / 180)) * cos ((( ". $ longitude."-lng) * pi ( ) / 180)))) * 180 / pi ()) * 60 * 1.1515 * 1.609344) 마커로부터의 거리 HAVING distance> =“. $ distance));

    [{“id”: 1,”name”:”Frankie Johnnie & Luigo Too”,”address”:”939 W El Camino Real, Mountain View, CA”,”lat”: 37.386337280273,”lng”:-122.08582305908, "distance": 16079.294719663}, { "id": 2, "name": "Amici 's East Coast Pizzeria", "address": "790 Castro St, Mountain View, CA", "lat": 37.387138366699, "lng": -122.08323669434,”distance”: 16079.175940152}, {“id”: 3,”name”:”Kapp 's Pizza Bar & Grill”,”address”:”191 Castro St, Mountain View, CA”,”lat”: 37.393886566162, ”lng”:-122.07891845703,”distance”: 16078.381373826}, {“id”: 4,”name”:”Round Table Pizza : Mountain View”,”address”:”570 N Shoreline Blvd, Mountain View, CA”, ”lat”: 37.402652740479,”lng”:-122.07935333252,”distance”: 16077.420540582}, {“id”: 5,”name”:”Tony & Alba 's Pizza & Pasta”,”address”:”619 Escuela Ave, Mountain View, CA”,”lat”: 37.394012451172,”lng”:-122.09552764893,”distance”: 16078.563225154}, {“id”: 6,”name”:”Oregano 's Wood-Fired Pizza”,”address”:”4546 El Camino Real, Los Altos, CA ","lat ": 37.401725769043,"lng ":-122.11464691162,"distance ": 16077.937560795}, {" id”: 7,”name”:”바와 그릴”,”address”:”24 Whiteley Street, Manchester”,”lat”: 53.485118865967,”lng”:-2.1828699111938,”distance”: 8038.7620112314}]

    20 마일이있는 행만 검색하고 싶지만 모든 행을 가져옵니다. 내가 뭘 잘못하고 있니

당신은 어떻게 생각하십니까?

이 사이트는 Akismet을 사용하여 스팸을 줄입니다. 댓글 데이터 처리 방법 알아보기.