google maps in r

144 views
Skip to first unread message

עמית קורנגוט

unread,
Dec 23, 2014, 7:56:26 AM12/23/14
to israel-r-...@googlegroups.com
שלום,

יש לי data.frame בR שהתצפיות זה ילדים חולים בכל מיני ערים בארץ וגם בעזה. אני מעוניינת ליצור מפה של גוגל או בדרך אחרת כך שאראה את מספר הילדים החולים בכל עיר על גבי המפה. לדוג' עבור תל אביב שיש שם 100 חולים אראה עיגול יותר גדול מאשר העיגול של ירושלים ששם יש 30 חולים.
יש לי נתונים על הקוארדינטות לפי רשת ישראל החדשה והייתי רוצה לדעת איך אני משרטטת את המפה ע"י כך שאני מעבירה את הקוארדינטות מרשת ישראל החדשה (ITM) לקוארדינטות של google maps.

אודה לכם מאוד על העזרה,
עמית

eliav schmulewitz

unread,
Dec 24, 2014, 1:58:28 AM12/24/14
to israel-r-...@googlegroups.com

עמית,
תנסה שתי חבילות:
rgdal - כדי להמיר את הנתונים ל latlon
ggmap - כדי להעלות את הנתונים על מפת גוגל
להמרת הקואורדינטות השתמש ב  project
אם תסתבך דבר איתי
אליאב

מיכאל דורמן

unread,
Dec 24, 2014, 2:36:01 AM12/24/14
to israel-r-...@googlegroups.com
עמית, הנה פתרון אפשרי:

> dat
       name sick      lon      lat
1  Tel-Aviv  100 179546.5 665848.1
2 Jerusalem   30 220327.8 630621.0
> library(sp)
> coordinates(dat) = ~ lon + lat
> proj4string(dat) = "+proj=tmerc +lat_0=31.73439361111111 +lon_0=35.20451694444445 +k=1.0000067 +x_0=219529.584 +y_0=626907.39 +ellps=GRS80 +towgs84=-48,55,52,0,0,0,0 +units=m +no_defs"
> library(rgdal)
> dat = spTransform(dat, CRS("+proj=longlat +datum=WGS84"))
> dat = as.data.frame(dat)
> library(ggmap)
> map = get_map(location = as.numeric(geocode("Jerusalem")),
+ zoom = 9,
+ maptype = "satellite")
Google Maps API Terms of Service : http://developers.google.com/maps/terms
Google Maps API Terms of Service : http://developers.google.com/maps/terms
> ggmap(map) +
+ geom_point(data = dat, 
+ alpha = 0.5, colour = "red",
+ aes(x = lon, y = lat, size = sick))+
+ scale_size(range = c(5,15))

הרעיון הוא להפוך את ה-data.frame לאובייקט מרחבי שמשוייכת אליו מערכת הקואורדינטות ITM, לאחר מכן לבצע reproject לרשת גיאוגרפית בעזרת rgdal כפי שציין אליאב, לבסוף אפשר להוריד מפת רקע וליצור מפה עם ggmap.

On Tuesday, December 23, 2014 2:56:26 PM UTC+2, עמית קורנגוט wrote:
map.jpeg

עמית קורנגוט

unread,
Dec 24, 2014, 3:22:25 AM12/24/14
to israel-r-...@googlegroups.com
מיכאל ואליאב,
תודה רבה על העזרה!
עוד לא יצא לי להסתכל לעומק על מה שכתבתם כי אני לא בבית. אבל מרפרוף מהיר עלתה לי שאלה קטנה למיכאל- הקוארדינטות שיש לך בdat זה לפי רשת ישראל החדשה (ITM)? כי אצלי זה מופיע בתור שלוש ספרות לפני הנקודה ושתיים אחרי, לדוג': 317.25...
תודה רבה!
עמית

בתאריך יום רביעי, 24 בדצמבר 2014 09:36:01 UTC+2, מאת מיכאל דורמן:

Michael Dorman

unread,
Dec 24, 2014, 4:16:53 AM12/24/14
to israel-r-...@googlegroups.com
היי עמית,

כן, הקואורדינטות שהשתמשתי בהן בדוגמה הן ברשת ישראל החדשה. 
אם יש 3 ספרות לפני הנקודה לא מדובר ברשת הזו, ואם יש את הערך 317.25 כנראה שזה גם לא קואורדינטות ITM מחולקות ב-1000 (למשל).

אם תרשום זוג או שנים של קואורדינטות למקומות ספציפיים (למשל ת"א) אוכל לנסות להבין באיזו רשת קואורדינטות מדובר בנתונים שלך.

אבל אופציה אחרת היא תמיד גיאוקודינג - אם יש לך שמות של הערים תוכל למצוא קואורדינטות שלהן ברשת גיאוגרפית למשל ע"י פונקציית geocode בספריית ggmap.

כל טוב,

מיכאל

עמית קורנגוט

unread,
Dec 24, 2014, 4:22:27 AM12/24/14
to israel-r-...@googlegroups.com

עבור רמת גן הקואורדינטות לפי רשת ישראל החדשה הן:
183.54. 664.03
ועבור תל אביב:
180.27. 664.03
את הנתונים על הקואורדינטות אני לוקחת מהאתר של הלמ''ס..

אשמח אם תראה איך אפשר להמיר אותן בR.
תודה רבה!!
עמית

בתאריך 24 בדצמ׳ 2014 11:16, ‏"Michael Dorman" <michael...@mail.huji.ac.il> כתב:
--
You received this message because you are subscribed to a topic in the Google Groups "Israel R User Group" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/israel-r-user-group/07o1525-Xz8/unsubscribe.
To unsubscribe from this group and all its topics, send an email to israel-r-user-g...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Michael Dorman

unread,
Dec 24, 2014, 4:57:35 AM12/24/14
to israel-r-...@googlegroups.com

אוקיי, נראה שאלה קואורדינטות רשת ישראל החדשה מחולקות באלף אחרי הכל. פשוט תכפילי באלף את ערכי כל אחת מהעמודות, לאחר מכן תוכלי להמשיך לפי הדוגמה שהבאתי קודם לכן :)

You received this message because you are subscribed to the Google Groups "Israel R User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email to israel-r-user-g...@googlegroups.com.

עמית קורנגוט

unread,
Dec 24, 2014, 11:42:19 AM12/24/14
to israel-r-...@googlegroups.com
ניסיתי להריץ את הקוד שלך אבל הוא כותב לי error..
הקוד הוא:
dat=data.frame(name=c("Tel-Aviv","Jerusalem"),sick=c(100,30),lon=c(179546.5,220327.8),lat=c(665848.1,630621.0))
library(sp)
coordinates(dat) = ~ lon + lat
proj4string(dat) = "+proj=tmerc +lat_0=31.73439361111111 +lon_0=35.20451694444445 +k=1.0000067 +x_0=219529.584 +y_0=626907.39 +ellps=GRS80 +towgs84=-48,55,52,0,0,0,0 +units=m +no_defs"

library(rgdal)
dat = spTransform(dat, CRS("+proj=longlat +datum=WGS84"))
dat = as.data.frame(dat)

library(ggmap)
map = get_map(location = as.numeric(geocode("Jerusalem")),zoom = 9,maptype = "satellite")

ggmap(map)
  +geom_point(data = dat,alpha = 0.5, colour = "red",aes(x = lon, y = lat, size = sick))
  + scale_size(range = c(5,15))

והerror הוא:
Error in +scale_size(range = c(5, 15)) : 
  invalid argument to unary operator

לא הצלחתי להבין מה הבעיה.
אשמח לעזרתך!
ממש תודה רבה על כל העזרה,
עמית

בתאריך 24 בדצמבר 2014 בשעה 11:57, מאת Michael Dorman <michael...@mail.huji.ac.il>:

Michael Dorman

unread,
Dec 24, 2014, 11:47:56 AM12/24/14
to israel-r-...@googlegroups.com
ה-"+" צריך להיות בסוף השורה, לא בתחילתה. נראה לי שזו הסיבה לשגיאה.

במקום זה:
ggmap(map)
  +geom_point(data = dat,alpha = 0.5, colour = "red",aes(x = lon, y = lat, size = sick))
  + scale_size(range = c(5,15))

תנסי את זה:
ggmap(map) +
  geom_point(data = dat,alpha = 0.5, colour = "red",aes(x = lon, y = lat, size = sick)) +
  scale_size(range = c(5,15))
Michael Dorman
PhD student
Geographic Information Laboratory
Department of Geography and Environmental Development
Ben-Gurion University, Israel

עמית קורנגוט

unread,
Dec 24, 2014, 11:56:02 AM12/24/14
to israel-r-...@googlegroups.com
תודה!
ניסיתי אבל עכשיו הוא כותב לי error אחר:
Error in .Call.graphics(C_palette2, .Call(C_palette2, NULL)) : 
  invalid graphics state
אתה יודע אולי מה הבעיה עכשיו?

בתאריך 24 בדצמבר 2014 בשעה 18:47, מאת Michael Dorman <michael...@mail.huji.ac.il>:

עמית קורנגוט

unread,
Dec 24, 2014, 11:59:23 AM12/24/14
to israel-r-...@googlegroups.com
עשית dev.off() וזה הסתדר..
ממש תודה רבה!!
רק שאלה אחרונה.. יש אפשרות שיראו את השמות של הערים על המפה?

בתאריך 24 בדצמבר 2014 בשעה 18:56, מאת עמית קורנגוט <amit.k...@gmail.com>:

Michael Dorman

unread,
Dec 24, 2014, 12:14:08 PM12/24/14
to israel-r-...@googlegroups.com
אין בעד מה, שמח לשמוע שהסתדר :)

להוסיף את השמות של הערים אפשר בעזרת geom_text:
ggmap(map) +
  geom_point(data = dat,alpha = 0.5, colour = "red",aes(x = lon, y = lat, size = sick)) +
  geom_text(data = dat, aes(x = lon, y = lat,label = name)) +
  scale_size(range = c(5,15))
אם את רוצה לשחק עם גודל גופן, צבע וכו', ראי בדף עזרה של פונקציה זו.
map2.jpeg

עמית קורנגוט

unread,
Dec 24, 2014, 12:27:29 PM12/24/14
to israel-r-...@googlegroups.com
תודה רבה!!
דבר אחרון בהחלט :)
כשאני מריצה את הקוד עבור הקוארדינטות של תל אביב וירושלים שאתה כתבת זה יוצא מעולה אבל כשאני מכניסה את הקוארדינטות שיש לי מהלמ"ס אני לא מקבלת מפה.. הקוארדינטות שלי מהלמ"ס עבור ת"א וירושלים הן: 
dat=data.frame(name=c("Tel-Aviv","Jerusalem"),sick=c(100,30),lon=c(18027,22086),lat=c(66485,663221))
האם אתה יודע למה זה לא עובד עבור הקוארדינטות האלה? איך אני יכולה לראות קוארדינטות עבור ערים אם דרך הלמ"ס זה לא עובד? אני צריכה גם עבור התנחלויות ויישובים ערביים מחוץ לקו הירוק שעבורם לא נראה לי שמצויין בgoogle maps, לדוג' נחליאל (ליד טלמון ,מודיעין)...


בתאריך 24 בדצמבר 2014 בשעה 19:14, מאת Michael Dorman <michael...@mail.huji.ac.il>:

Michael Dorman

unread,
Dec 24, 2014, 12:57:52 PM12/24/14
to israel-r-...@googlegroups.com
הקואורדינטות מהלמ"ס אמורות לעבוד באותו אופן. לא יודע לגבי הטבלה שיש לך באופן כללי, אבל בדוגמה הספציפית שרשמת הקואורדינטות לא נכונות. שימי לב שקואורדינטות של רשת ישראל החדשה הן תמיד בעלות 6 ספרות, ואילו כאן ה-lon בעלות 5 ספרות וגם ה-lat של תל-אביב בעלת 5 ספרות.

עמית קורנגוט

unread,
Dec 24, 2014, 1:11:01 PM12/24/14
to israel-r-...@googlegroups.com
אלה הקוארדינטות מהלמ"ס.. מוציאים אותן בתור מספר אחד בעל 10 ספרות שה-5 ספרות הראשונות זה ה-X וה-5 האחרונות זה ה-Y..מאיפה אתה הוצאת את הקוארדינטות?

בתאריך 24 בדצמבר 2014 בשעה 19:57, מאת Michael Dorman <michael...@mail.huji.ac.il>:

Michael Dorman

unread,
Dec 24, 2014, 1:26:49 PM12/24/14
to israel-r-...@googlegroups.com
אוקיי... אז אולי תנסי לכפול ב-10 כך שיתקבל מספר בעל 6 ספרות?  כי הערכים נראים הגיוניים, רק צריך להוסיף אפס בסוף.

אני השתמשתי ב-Google Geocoding API באופן הבא, וכך גם הגעתי לטבלה ההתחלתית של הדוגמה:
names = c("Tel-Aviv", "Jerusalem")

library(ggmap)
dat = geocode(names)
dat$name = names
dat$sick = c(100,30)
dat

library(sp)
coordinates(dat) = ~ lon + lat
proj4string(dat) = "+proj=longlat +datum=WGS84"

itm = CRS("+proj=tmerc +lat_0=31.73439361111111 +lon_0=35.20451694444445 +k=1.0000067 +x_0=219529.584 +y_0=626907.39 +ellps=GRS80 +towgs84=-48,55,52,0,0,0,0 +units=m +no_defs")

library(rgdal)
dat = spTransform(dat, itm)
 

עמית קורנגוט

unread,
Dec 24, 2014, 1:36:48 PM12/24/14
to israel-r-...@googlegroups.com
הכפלתי ב-10 אבל עדיין זה עושה את אותו error..
Error: 'x' and 'units' must have length > 0
In addition: Warning messages:
1: Removed 236 rows containing missing values (geom_point). 
2: Removed 236 rows containing missing values (geom_text).

אם אני עושה geocode(names) אז אני לא מקבלת את הערכים עבור ערים שמחוץ לקו הירוק.. אתה יודע מה אפשר לעשות עם זה?
ד"א אם אני רוצה לראות את כל מפת ישראל ממג'דל שמס עד אילת אז מה אני עושה? אם אני עושה בmap י zoom=8 אז זה גדול מדי וחותך את אילת ואם אני עושה zoom=7 אז זה קטן מדי.. איך אפשר לשלוט בזה?

תודה רבה!!
עמית

בתאריך 24 בדצמבר 2014 בשעה 20:26, מאת Michael Dorman <michael...@mail.huji.ac.il>:

Michael Dorman

unread,
Dec 24, 2014, 1:49:59 PM12/24/14
to israel-r-...@googlegroups.com
בשביל להבין את השגיאה הנ"ל אני צריך לראות את הקוד הקודם לה... את יכולה בבקשה לצרף דוגמה (קטנה, כמו עם ת"א וי-ם) שיוצרת שגיאה כזו?

לגבי גיאוקוד מחוץ לקו הירוק:

1. את יכולה לנסות גם את הפונקציה geocodeHERE_simple מספריית geocodeHERE. כאן יש דוגמה:

2. את יכולה (אם זה לא מספר גדול מדי של נקודות) למצוא את המיקומים, למשל ב-Google Maps, ולהעתיק את הקואורדינטות לטבלה באופן ידני.

לגבי ה-zoom, אכן יש מספר רמות בדידות שבהן אפשר להוריד תמונת רקע מ-Google. למיטב ידיעתי אין אפשרות לקבל תמונה שבין zoom=7 לבין zoom=8... אם חשוב לך לשלוט בעיצוב של המפה בהיבט הזה והיבטים אחרים, אולי לא יהיה מנוס משימוש בתוכנת GIS כגון ArcGIS או QGIS במקום ב-R.

עמית קורנגוט

unread,
Dec 24, 2014, 2:02:44 PM12/24/14
to israel-r-...@googlegroups.com
עשיתי לפי העצה השניה שלך.. זה לא הרבה נקודות אז השלמתי אותן ידנית לפי google maps.
ממש תודה רבה על כל העזרה!!
עזרת לי מאוד!
סופשבוע נעים!
עמית

בתאריך 24 בדצמבר 2014 בשעה 20:49, מאת Michael Dorman <michael...@mail.huji.ac.il>:

Michael Dorman

unread,
Dec 24, 2014, 2:11:57 PM12/24/14
to israel-r-...@googlegroups.com
סופ"ש נעים! :)

עמית קורנגוט

unread,
Jan 1, 2015, 1:41:41 PM1/1/15
to israel-r-...@googlegroups.com
הי,

שאלה קטנה לגבי המפות.. יש דרך שבמקום שהוא יסמן את הגודל של מספר החולים בכל עיר לפי עיגול אדום בגודל שונה אז שהוא יסמן עיגולים באותם גדלים אבל שמשתנים לפי סקלה של צבעים?

תודה רבה!!
עמית

בתאריך 24 בדצמבר 2014 בשעה 21:11, מאת Michael Dorman <michael...@mail.huji.ac.il>:

eliav schmulewitz

unread,
Jan 2, 2015, 3:36:04 AM1/2/15
to israel-r-...@googlegroups.com

בטח שאפשר, אני לא יודע בדיוק מה אתה עושה עכשיו, אז יעזור אם תוסיף קוד.

ggmap  מסתמך על ggplot2 אם אתה משתמש בgeom_point  אתה יכול להגדיר color  ומשתנה .

חוץ מזה אתה יכול להוסיף scale_colour_gradient.

הכי טוב שתבדוק כאן, תראה את כל האופציות שלך

בהצלחה

אליאב




עמית קורנגוט

unread,
Jan 2, 2015, 3:38:41 AM1/2/15
to israel-r-...@googlegroups.com
זה הקוד שלי:
ggmap(map) + 
  geom_point(data = dat,alpha = 0.5, colour = "red",aes(x = lon, y = lat, size = prop)) +
  geom_text(data = dat2, aes(x = lon, y = lat,label = City),size=2) +
  scale_size(range = c(5,15))
אני רוצה שבמקום גודל שונה יהיה צבע שונה לפי הגודל של prop...
תודה רבה!! :)

בתאריך 2 בינואר 2015 בשעה 10:36, מאת eliav schmulewitz <eli...@gmail.com>:

eliav schmulewitz

unread,
Jan 2, 2015, 5:17:32 AM1/2/15
to israel-r-...@googlegroups.com

אולי זה יעבוד

ggmap(map) + 
  geom_point(data = dat,alpha = 0.5,aes(x = lon, y = lat,color = prop)) +scale_colour_gradient("legend",low = "blue", high="red")+  geom_text(data = dat2, aes(x = lon, y = lat,label = City),size=2)

To unsubscribe from this group and all its topics, send an email to israel-r-user-group+unsub...@googlegroups.com.

עמית קורנגוט

unread,
Jan 2, 2015, 5:24:08 AM1/2/15
to israel-r-...@googlegroups.com
תודה רבה! אבל זה לא עובד. .זה כותב ERROR:
Error in unit(tic_pos.c, "mm") : 'x' and 'units' must have length > 0

בתאריך 2 בינואר 2015 בשעה 12:17, מאת eliav schmulewitz <eli...@gmail.com>:
To unsubscribe from this group and all its topics, send an email to israel-r-user-g...@googlegroups.com.

eliav schmulewitz

unread,
Jan 2, 2015, 5:32:08 AM1/2/15
to israel-r-...@googlegroups.com
ננסה לעשות factor:

ggmap(map) +   geom_point(data = dat,alpha = 0.5,aes(x = lon, y = lat,color =factor(prop))) +scale_colour_gradient("
legend",low = "blue", high="red")+  geom_text(data = dat2, aes(x = lon, y = lat,label = City),size=2)

To unsubscribe from this group and all its topics, send an email to israel-r-user-group+unsubscribe...@googlegroups.com.

For more options, visit https://groups.google.com/d/optout.

עמית קורנגוט

unread,
Jan 2, 2015, 5:42:12 AM1/2/15
to israel-r-...@googlegroups.com

בסוף הייתה לי טעות קטנה אז זה עבד בלי הfactor..
תודה רבה!!
שבת שלום!!

בתאריך 2 בינו׳ 2015 12:32, ‏"eliav schmulewitz" <eli...@gmail.com> כתב:
To unsubscribe from this group and all its topics, send an email to israel-r-user-g...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages