PHP: Daha büyük bir ızgara bir 'subgrid' bulmak için matematiksel etkili yolu nedir?

2 Cevap php

Ben büyük bir ızgara bir subportion bulmak için etkili bir yol bulmaya çalışıyorum. Şu anda bu satır kimlikleri bir DAN-TO seçimi tanımlamak için satırlar aracılığıyla döngü değilim, ama bu doğru gelmiyor ...

Diyelim ki (1 ile 200 arasında x 1 ila 200, y) 200x200 alanların bir ızgara var diyelim. Her alan da X1 başlayarak, benzersiz kimlik kullanıcısı var, Y1 (fieldid = 1) X200 için, Y200 (fieldid = 40000).

Ben (XY-aralıkları veya uniqueids çok daha hızlı tercih benzersiz kimliği yıllara dayalı) veritabanından seçmek gerekir ızgara bir subportion var. Subportion (yine XY değeri ya da benzersiz bir kimliği dayalı) upperleft alan tarafından tanımlanan ve daha sonra 16 sahası genişliğinde ve 9 alanlar yüksektir.

So, how can I efficiently select a subgrid of 144 fields (16x9) of a large grid of 40000 fields (200x200) based on the unique-id or XY-value of the upperleft field in the 16x9 subgrid?

2 Cevap

Ben size aşmak için çalışıyoruz sorunu anlamak, bazı bağlamda muhtemelen yardımcı olacaktır çok emin değilim ... Neyse, buraya ...

x1 -> x2 = 16 spaces y1 -> y2 = 9 spaces

x1 * y1 = numarası başlar

x2 * y2 = sonu Kimliği

Eğer dokuz aralıkları (burada 'a' geçerli aralığı) sahip olacaktır:

x1*y1 < a < (x1*y1)+16
x1*(y1+1) < a < (x1*(y1+1))+16
x1*(y1+2) < a < (x1*(y1+2))+16
....
x1*(y1+8) < a < (x1*(y1+8))+16

Ben geometry extension in MySQL oldukça iyi optimize edilmiş bulduk. Yani en verimli şekilde matris içinde pozisyon tutan sofranıza türüne POINT bir sütun eklemek olacaktır.

ALTER TABLE YourTable ADD COLUMN pos POINT NOT NULL;

Sonra (10/10 koordinatları başlayan 16x9 alanı seçerek için Örnek) the extension's functions kullanarak seçebilirsiniz:

SET @polygon = GeomFromText('Polygon((10 10, 26 10, 26 19, 10 19, 10 10))');
SELECT * FROM YourTable WHERE MBRContains(@polygon, pos);