Разделенные меридианом полигоны в геомапах SAS VA (SAS GRAPH)

Я пытаюсь создать пользовательские карты для России в Visual Analytics. Итак, я столкнулся с проблемой "разделенного региона".
Вы можете увидеть визуализацию этой проблемы с помощью Dal'nevostochnyy (DVFO) область от MAPSGFK библиотека. введите описание изображения здесь

Я пытался исправить разброс по этому коду:

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

И вот я получаю этот результат (на картинке изображен регионChukotka, но это не важно)

введите описание изображения здесь Это лучше, чем в предыдущей ситуации, но похоже накостыль.
Я пытаюсь объединить эти два полигона с помощью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;

введите описание изображения здесь

Итак, мой вопрос:
Как я могу удалить пространство между двумя отдельными областями?

Спасибо за ваши ответы / комментарии.

2 ответа

Решение

Спасибо Joe за ваш пост. Ваш ответ заставил меня задуматься: "Может быть, я не могу объединить два полигона, потому что у них нет общих точек?". Итак, я увидел задачу так:

  1. Удалить точки между полигонами (красные квадраты на картинке ниже)
  2. Установить координаты точек полигонов ребра равными (Синие стрелки)

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;

Результат:

Кажется, это работает, по крайней мере, для конкретной проблемы. Проблема в том, что 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;
Другие вопросы по тегам