Ik kwam deze interessante tutorial tegen over het snel kunnen opvragen van countries bij een bepaald IP adres mbv van MySQL's openGIS implementatie.
De 'gebruikelijke' maar trage methode in een notedop: SELECT country FROM ws_ipcountry WHERE ip_from < INET_ATON('217.166.147.53') AND INET_ATON('217.166.147.53') < ip_to
Zijn er mensen die hier ervaringen mee hebben? De SELECT query uit de tutorial geeft een syntax error, en heb de MySQL documentatie erop nageslagen maar ik kom er niet uit:
de fout lijkt hem te zitten in het gedeelte MBRContains(a,b). want de volgende query werkt wel:
ik heb dus een tabel ws_ipcountry, hierin staat een polygoon-kolom van alle IP ranges, volgens de volgende berekening
zaakje draait op MySQL 4.1, waarbij ik de tabel op MyISAM heb staan aangezien 4.1 alleen openGIS voor dit type opslag support.
De 'gebruikelijke' maar trage methode in een notedop: SELECT country FROM ws_ipcountry WHERE ip_from < INET_ATON('217.166.147.53') AND INET_ATON('217.166.147.53') < ip_to
Zijn er mensen die hier ervaringen mee hebben? De SELECT query uit de tutorial geeft een syntax error, en heb de MySQL documentatie erop nageslagen maar ik kom er niet uit:
SQL:
1
2
3
4
5
6
7
8
9
10
11
| SELECT countrycode FROM ws_ipcountry WHERE MBRContains( ip_poly, PointFromWKB( Point( INET_ATON('217.166.147.53'), 0 ) ) ) |
de fout lijkt hem te zitten in het gedeelte MBRContains(a,b). want de volgende query werkt wel:
SQL:
1
2
3
4
5
6
| SELECT PointFromWKB( Point( INET_ATON('217.166.147.53'), 0 ) ) |
ik heb dus een tabel ws_ipcountry, hierin staat een polygoon-kolom van alle IP ranges, volgens de volgende berekening
code:
1
2
3
4
5
6
7
8
9
10
| ip_poly = GEOMFROMWKB(
POLYGON(
LINESTRING(
POINT(ip_from, -1),
POINT(ip_to, -1),
POINT(ip_to, 1),
POINT(ip_from, 1),
POINT(ip_from, -1)
)
) |
zaakje draait op MySQL 4.1, waarbij ik de tabel op MyISAM heb staan aangezien 4.1 alleen openGIS voor dit type opslag support.
[ Voor 7% gewijzigd door js303 op 27-11-2007 13:47 ]