2017-04-06 2 views
0

J'essaye de créer des cartes personnalisées en Russie dans Visual Analytics. Donc, j'ai fait face à un problème de "région séparée".
Vous pouvez voir une visualisation de ce problème en utilisant la zone Dal'nevostochnyy (DVFO) de la bibliothèque MAPSGFK. enter image description hereSéparé par les polygones Meridian dans les géomarques SAS VA (SAS GRAPH)

J'ai essayé de corriger la dispersion par ce code:

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

Et si je reçois ce résultat (sur l'image région imagée Chukotka, mais il ne marche pas ailleurs):

enter image description here C'est mieux que la situation précédente, mais cela ressemble à béquille.
J'ai essayé de combiner ces deux polygones en utilisant GREMOVE (ajouter aussi paramether FUZZ), mais le résultat était le même.

UPD:
J'utiliser ce code pour obtenir les coordonnées:

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

Ma question est la suivante:
Comment puis-je supprimer l'espace entre deux séparés régions?

Merci pour vos réponses/commentaires.

+0

Pouvez-vous inclure le code complet pour générer cette carte? – Joe

Répondre

0

Merci @Jor pour vous postez. Votre réponse m'a poussé à penser: "Peut-être que je ne peux pas fusionner deux poligons parce qu'ils n'ont pas de points communs?". Donc, j'ai vu tâche comme ceci:

  1. Supprimez les points entre les polygones (carrés rouges dans l'image ci-dessous)
  2. les points polygones de Set bord coordonnées égales (flèches bleues)

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; 

Résultat: enter image description here

1

Cela semble fonctionner, au moins pour le problème spécifique. Le problème est que le segment n'est pas le même pour ceux-ci, donc ils obtiennent une bordure. En faisant cela d'une manière plus générale, je ne suis pas sûr s'il y a un bon moyen ou pas; il y a probablement un meilleur moyen, en utilisant peut-être GPROJECT, qui permettrait d'éviter complètement le problème.

Mais cela fonctionne, au moins pour cette question spécifique ...

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;