ABD eyaletleri sınırındaki alma (php)

4 Cevap php

HI bir devlet seçmek ve sınır devletlerin listesi verilecek gerekiyor. Herkes sahip ya da zaten bunun için yapılan kod biliyor mu?

Muhtemelen sınırların bir MySQL veritabanı (her satır için iki devlet sütunlar), ve ardından seçeneğini eşleşen - Ben kendim yazmak zorunda kalırsanız, ne en iyi yolu olurdu?

EDIT: Burada bir başlangıç ​​- sınırların listesi: http://www.econ.umn.edu/~holmes/data/BORDLIST.html

4 Cevap

Birçok kombinatoryel veri setleri gibi, bu bir kapalı bir zaman / uzay ticaret vardır.

Eğer A isNextTo B ilişkiyi kullanırsanız, diyagonal üzerinde kıvrımlar bir ilişki var, yani B de NexTTo A.

Bu nedenle tam numaralandırma olması gereken iki katı kadar büyük.

Eğer ilişkinin sadece yarısını kullanmak Ancak, bunu her iki yönde aramak zorunda kalacak: Bir isNextTo X veya X isNextTo A.

Ve bir SQL veritabanında tutarak bu endeks verileri veri olarak aynı boyutta olacaktır aramak gerektiği gibi tekrar depolama çift, neden rahatsız olur?

PHP sadece bir kez veri yüklü olmak zorunda öylesine belki PhpClasses.org 'nin btree sınıf ilgi olacağını yerli b-ağaçları yok.

Verdiğiniz listede, ben zaten oldukça kolay olduğunu söyleyebilirim. Ben şöyle bir PHP diziye listesini dönüştürmek olacaktır:

$borders = 
 array("AL-FL",
       "AL-GA",
 ...
 );

sonra, bir sorgulama fonksiyonu için bir ilkel (ama uygulanabilir) örnek:

/**
 * @desc Returns an array with the bordering states for a state. 
 * @param string the 2-letter code of the state. Case insensitive. Example: AK
 * @param array the list of borders.
 * @return an array with the 2-letter codes of all neighboring states.
 */

function getBorderingStates($state, $borders)
 {
   $neighbors = array(); 
   $state = strtolower($state);

   foreach ($borders as $border)
    {
      $pair = explode("-", $border)
      if (strtolower($pair[0]) == $state) 
        array_push($neighbors, $pair[1]);

      if (strtolower($pair[1]) == $state) 
        array_push($neighbors, $pair[0]);

     }
     return $neighbors;

 }

Bunu kendiniz yazmak zorunda kalmazsınız. Yahoo kayıtları yerleri ve genel Geo-veri, ama ilişkiler sadece lutfen WOEID adlı güzel bir konum belirleme API vardır; http://developer.yahoo.com/geo/geoplanet/guide/concepts.html#relationships

Ben tüm dışarı MySQL DB Bu eşleştirilmiş (DOWNLOAD HERE). Bu sürece de devlet adı ve kısaltması olarak lat ve gelmiştir.

Bu sorgu devlet, Kisaltmayi ve komşu sorgulamak için bu tabloyu kullanabilirsiniz nasıl bir örnek olacaktır:

#Find state by abbrev
SELECT * FROM states WHERE abbrev = "WA" LIMIT 1;

#Find state by name
SELECT * FROM states WHERE name = "Washington" LIMIT 1;

#Find neighboring states simple
SELECT * FROM states WHERE parent_id = 55;

#Find neighboring states expanded
SELECT * FROM states WHERE parent_id = (SELECT id FROM states WHERE `name` = "West Virginia" LIMIT 1);

* Not kullanılan burada komşu veriler diğer görevinden array'd verileri oldu.