Friday, 9 March 2018

point - Performing join on simultaneous spatial and attribute criteria in ArcGIS for Desktop?


I have two point layers and want to perform a spatial join on nearest distance.


Normally it is easy with ArcMap. But now I have a restricting condition on the spatial join. The restriction only allows the attributes to be joined if the nearest point is within the same country.


Both point layers have information about the country in their attribute table (e.g., "de" for Germany). So it must be some spatial join like:


Join attribute B to layer A on nearest distance where countryID_Layer A = countryID_Layer B.


Does anybody have an idea how I could solve this?


EDIT: Image I have following attributes: Table1(hotels): h_key, l_iso_a2, geom and in Table2(iata_codes): loc, ctry, geom


EDIT2: I tried to write the SQL-Statement, but it does not work somehow. Can anybody help me with this statement?:


select distinct on (h.h_key) h.h_key, h.l_iso_a2, i.loc, i.ctry, distance
from ( select h.h_key, h.l_iso_a2, i.loc, i.ctry as country2, st_distance (h.geom,
i.geom) as distance
from hotels AS h, iata_codes AS i
where h.l_iso_a2 = i.ctry order by h.geom <-> i.geom ) as iata_codes_h_key;

Answer



Found it. This helps:



with dist_min as ( 
select h.gid, min(st_distance(h.geom, i.geom)) dist_min from t1 h, t2 i
where h.country = i.country
group by h.gid
)
select h.attribute1, h.gid, i.attribute1, i.gid, d.dist_min from dist_min d, t1 h, t2 i
where st_distance(h.geom, i.geom) = dist_min
order by h.attribute1

No comments:

Post a Comment

arcpy - Changing output name when exporting data driven pages to JPG?

Is there a way to save the output JPG, changing the output file name to the page name, instead of page number? I mean changing the script fo...