해당 영역에 고르게 분포되어 있는 것처럼 보이는 대규모 좌표 집합에서 일부 좌표를 선택합니다.
P粉262113569
P粉262113569 2024-02-26 16:23:02
0
1
365

지역 및 위도/경도 위치 열이 있는 MySQL 테이블이 있습니다. 각 지역에는 20.000。有没有办法只选择几个,比如 100 등 여러 위치가 있는데, 지도에 고르게 분포되어 있는 것 같죠?

배포가 완벽할 필요는 없으며 쿼리 속도가 더 중요합니다. MySQL을 직접 사용하여 이것이 가능하지 않은 경우 매우 빠른 알고리즘을 사용하여 균등하게 분산된 위치를 선택할 수 있습니다.

미리 감사드립니다.

EDIT: 댓글에 일부 요청에 대한 답변이 있습니다. 데이터에는 관련 작업이 없으며 단지 지역 및 위치 좌표만 있습니다. 예:

으아아아

특성이 있는 열도 있지만 필터링에만 사용됩니다.

저는 nth 행을 모두 가져오려고 노력했는데 조금 느리기는 하지만 제대로 작동하는 것 같습니다

으아아아

사용random()도 작동하지만 약간 느립니다.

편집 2: 양식에 우편번호를 추가하는 것이 쉬운 것으로 나타났습니다. 이를 통해 우편번호별로 그룹화하면 만족스러운 결과를 얻을 수 있을 것 같습니다. 유일한 문제는 약 3000개의 서로 다른 우편번호로 구성된 매우 넓은 지역이 있으며 그 중 100개만 가져오면 많은 우편번호가 한 곳에 표시될 수 있으므로 PHP에서 추가 처리가 필요할 수 있다는 것입니다.

Edit3, @RickJames의 질문에 댓글을 달아 한 곳에 모아두세요:

  1. "균등분포"를 정의해 주세요 - 위도의 균일분포? 두 사람은 서로 "가까이" 있지 않습니까? 등.
    • '균등하게 분포됨'은 잘못된 단어 선택입니다. 우리는 단지 지역의 일부 위치를 보여주고 싶었지만 모든 것을 한 곳에서 보여주고 싶었습니다
  2. '영역'은 직사각형인가요? 육각형? 아니면 게리맨더링?
    • 대략 직사각형이라고 생각하면 되지만, 그다지 중요하지 않습니다. 중요한 점을 놓쳤습니다. 여러 지역의 위치도 표시해야 합니다. 지역은 서로 멀리 떨어져 있거나 인접할 수 있습니다(그러나 겹치지는 않음). 이 경우 100개의 샘플을 다양한 지역에 배포하려고 합니다.
  3. '지역당 100'은 고정인가요? 아니면 "약 100"일 수도 있습니다.
    • 고정된 게 아니고 100개 정도인데 보기에 안 좋으면 바꿀 수 있어요
  4. 테이블에 AUTO_INCRMENT ID가 있나요? 숫자에 차이가 있나요?
    • 예, AUTO_INCRMENT아이디가 있고 공백이 있을 수 있습니다
  5. 질문이 '지역당 100개'에서 '우편번호당 1개'로 변경되었나요?
    • 아니요, 문제는 여전히 동일합니다. "각 영역을 100개 표시하지만 모두 같은 위치에 표시되지는 않습니다.", 어떻게 수행되는지는 중요하지 않습니다.
  6. 출력의 총 행 수와 필요한 행 수는 얼마입니까?
    • 총 행 수는 지역 및 표준에 따라 다르며 지역당 최대 40,000개입니다. 총액이 1000,我们希望仅显示随机的 100。如果 1000보다 많거나 적다면 그냥 다 보여주면 됩니다
  7. 쿼리를 실행할 때마다 다른 예가 필요합니까?
    • 동일한 샘플, 다른 샘플(동일한 규격이라도) OK
  8. 테이블에 열을 추가하시겠습니까?
    • 내 마음대로 할 수는 없지만, 좋은 주장이 있다면 아마도 새 열을 추가할 수 있을 것입니다.

P粉262113569
P粉262113569

모든 응답(1)
P粉982054449

이것은 목표를 달성할 수 있는 방법입니다.

    테이블을 사전 처리하고 새 테이블을 만들어 "중복" 항목을 제거하세요.
  1. 새 테이블이 충분히 작으면 전체 스캔이 충분히 빠를 수 있습니다.
"중복"의 경우 두 항목이 같은 위치에 있는지 알아내는 대략적인 방법이라고 생각하세요.

으아아아

"5"와 "3"은 더 많은(또는 더 적은) ID를 유지하기 위해 위(또는 아래)로 조정될 수 있습니다. 위도/경도 배열로 인해 "5"와 "3"은 다르며, 이 비율은 대부분의 온대 지역에서 적용됩니다. (적도 근처에서는 동일한 양을 사용하고, 위도가 높을수록 더 많은 양을 사용합니다.)

작은 결함이 있습니다. 매우 가까운 두 개의 항목이

에 의해 생성된 경계를 넘을 수 있습니다. ROUNDs

원래 테이블에는 몇 개의 행이 있나요? 위 쿼리는 몇 개의 행을 생성했습니까? (

)SELECT COUNT(*) FROM ( ... ) x;

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿