2017-04-06 16 views
0

我正在尝试在Visual Analytics中为俄罗斯创建自定义地图。 所以,我面临着“分离区域”的麻烦。
您可以使用MAPSGFK库中的Dal'nevostochnyy (DVFO)区域来查看此问题的可视化。 enter image description here由地理信息系统中的子午线多边形隔开SAS VA(SAS GRAPH)

我试图通过这个代码来解决分散:

data mps.vaasia1; 
set mps.vaasia1; 
if LONG < 0 and isoalpha2="RU" then long=long+360 ; 
run; 

所以我得到这样的结果(上图成像区域Chukotka,但无论这么想的)

enter image description here 比以前的情况要好,但看起来像是拐杖
我试图通过使用GREMOVE(也添加参数FUZZ)来结合这两个多边形,但结果相同。

UPD:
我使用此代码来获得坐标:

data ch; 
set mapsgfk.Russia; 
where id ="RU-77" ; 
if LONG LE 0 then long=long+360 ; 
x=long ; 
y = lat; 
run; 

enter image description here

所以我的问题是:
我怎么能之间有两个分离区域删除的空间?

Thx为您的答案/评论。

+0

您能否包含用于生成该映射的完整代码? – Joe

回答

0

感谢@Jor为您发布。你的回答让我想到:“可能是因为他们没有共同点,我不能合并两个波动?”。所以,我看到的任务是这样的:

  1. 多边形之间取出点(如下图红色方块)
  2. 设置边的多边形点坐标等于(蓝色箭头)

enter image description here

data ch 
/*Drop out dots with coord in red squares*/ 
(where=(not(lat > 66 and lat <68 and long >179 and long<181))); 
set mapsgfk.Russia; 
where id ="RU-77" ; 

if LONG LE 0 then long=long+360 ; 

/*Set coordinates of near edge's points the same*/ 
if (long > 179.9 and long < 180.3) then do; 
    long =180; 
    if (lat > 68.9 and lat < 69) then lat=68.97; 
    if (lat > 65 and lat < 65.1) then lat=65; 
    if (lat > 70.9 and lat < 71) then lat=70.95; 
    if (lat > 71.5 and lat < 71.6) then lat=71.55; 
end; 

x=long ; 
y = lat; 
run; 

proc gremove data=ch out=ch; 
by id; 
id id1; 
run; 


proc gmap data=ch map=ch; 
id id; 
choro id/nolegend; 
run; 
quit; 

结果: enter image description here

1

这似乎工作,至少对于具体问题。问题是这些segment是不一样的,所以他们得到一个边界。以更一般的方式来做这件事,我不确定是否有好的方法;可能有更好的方法,可能使用GPROJECT,这将完全避免该问题。

但是这部作品,至少在这个具体问题...

data vaasia1; 
set mapsgfk.asia1; 
if LONG LE 0 and isoalpha2="RU" then do; 
    long=long+360 ; 
    if segment=2 then segment=1; 
    else if segment=7 then segment=8; 
end; 
if idname =: 'Dal'; 
*if long le 0; 
run; 


proc gmap data=vaasia1 map=vaasia1; 
id id; 
choro id/nolegend; 
run; 
quit;