Vairāk

Atrodiet visus punktus 5 metru attālumā ar tādu pašu nosaukumu lielā datu kopā

Atrodiet visus punktus 5 metru attālumā ar tādu pašu nosaukumu lielā datu kopā


Manā kartoddb ir liela datu kopa (500 000 rindu), kas satur šādus datus. (Vienkāršotai rakstīšanai saīsināts)

cartodb_id | saskaitīt | lat | garš | nosaukums | the_geom 1 | 1 | 52.4118634358102 | -4.088212251663207 | aber | Geom 2 | 1 | 52.48842511440679 | -3.4982872009277344 | karte | Geom 3 | 3 | 52.41192887963411 | -4.088115692138672 | aber | Ģeoms

Es gribētu izpildīt vaicājumu, kas iet caur datiem un katrai rindai atrod visus punktus 5 metru robežās UN ar tādu pašu nosaukumu.

Tas ir no transkripcijas projekta, un daudzi cilvēki ir noklikšķinājuši tajā pašā vietā, bet ne tajā pašā vietā. Skaitlis parāda, cik reizes uz vietas ir noklikšķināts/ievadīts.

Tad es vēlētos izveidot jaunu datu kopu, kas satur vienu atrašanās vietu un precīzāku skaitu, kā redzat no augšas, ir divi “aberi”, kas atrodas tuvu viens otram. Šim nolūkam es ņemšu tikai pirmo latu/garo un izmetīšu visus pārējos. Tā rezultātā es nokļuvu pie galda, kura lats ir garš kā pirmais, bet ar skaitli 4.

Nekad neesmu spēlējis ar PostGis, šķiet, ka man ir jāizmanto <>, lai atrastu tuvākos punktus, kā arī st_Distance with :: Geography. Šķiet, ka es varu atrast attālumu no viena punkta, izmantojot tālāk norādīto

SELECT *, ST_Distance (the_geom :: ģeogrāfija, CDB_LatLng (53.19100611356759, -3.8425111770629883) :: ģeogrāfija) / 1000 AS attālums no gb1900 Pasūtīt pēc dist ASC

Es vienkārši nezinu, kā to pārvērst par vajadzīgo.


To var izdarīt, izmantojotģeogrāfijatipa, izmantojot ģeogrāfisko rādītāju, vai izmantojotģeometrijaierakstiet ar nelielu matemātiku, lai pielāgotos Mercator izkropļojumiem.

Arģeogrāfija:

CREATE INDEX gb1900_geog_idx ON gb1900 USING GIST (ģeogrāfija (the_geom)); IZVEIDOT TABULU JAUNU tabulu AR C UN a.cartodb_id! = B.cartodb_id GROUP BY a.cartodb_id) SELECT c.cartodb_id, c.count, st_x (g.the_geom) AS long, st_y (g.hehege) as lat, g.name, g.the_geom, g.the_geom_webmercator NO C PIENĀKTIES gb1900 g LIETOŠANA (cartodb_id);

Arģeometrija:

CREATE TABLE newtable AS AR C a.name = b.name AND a.cartodb_id! = b.cartodb_id GROUP BY a.cartodb_id) SELECT c.cartodb_id, c.count, st_x (g.the_geom) AS garš, st_y (g.the_geom) kā lats, g .nosaukums, g.the_geom, g.the_geom_webmercator NO C pievienoties gb1900 g USING (cartodb_id);

Tā kā jūsu meklēšanas rādiuss ir ļoti mazs, merkatora risinājuma lietošanai nav nekādu precizitātes sodu, tāpēc es droši vien ieteiktu to darīt, jo tas ir minimāli efektīvāks un izvairās no rezerves indeksa izveides (CartoDB automātiski pievieno indeksuthe_geom_webmercatortas jau ir parūpējies vai par jums).