PDA

View Full Version : استفاده از Polygon در گوگل مپ



sara.nikzadeh
دوشنبه 09 شهریور 1394, 16:23 عصر
با سلام دوباره خدمت دوستان خوبم
من دوتا polygon ساختم. موقعیت کاربر هر در هر بار که اکتیویتی اجرا میشه میگیرم.
حالا با این توصیفات، میخوام اگه کاربرم، تو موقعیت polygon که تعریف کردم قرار گرفت،داخل مارکر مربوط به اون polygon توضیحاتی درج بشه
امیدوارم منظورم رو خوب رسونده باشم.
اینم کدهای اکتیویتی :

public class MainActivity extends ActionBarActivity implements
GooglePlayServicesClient.OnConnectionFailedListene r,
GooglePlayServicesClient.ConnectionCallbacks
{

private static final int GPS_ERRORDIALOG_REQUEST = 9001;

GoogleMap googleMap;
Marker marker;

private static final float Default_Zoom = 15;

LocationClient locationClient;

@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);

if (serviceOk())
{

ArrayList<LatLng> points = new ArrayList<LatLng>();

points.add(new LatLng(32.610253, 51.626202));
points.add(new LatLng(32.610271, 51.617437));
points.add(new LatLng(32.606972, 51.617469));
points.add(new LatLng(32.606692, 51.617791));
points.add(new LatLng(32.606629, 51.626181));

// draw polygon:
PolygonOptions polygonOptions = new PolygonOptions();
polygonOptions.addAll(points);
polygonOptions.fillColor(Color.YELLOW);
polygonOptions.strokeWidth(10);
polygonOptions.strokeColor(Color.DKGRAY);

ArrayList<LatLng> point = new ArrayList<LatLng>();

point.add(new LatLng(32.612202, 51.607433));
point.add(new LatLng(32.609919, 51.607377));
point.add(new LatLng(32.610128, 51.601886));
point.add(new LatLng(32.612369, 51.602079));

// draw polygon:
PolygonOptions polygonOption = new PolygonOptions();
polygonOption.addAll(point);
polygonOption.fillColor(Color.GREEN);
polygonOption.strokeColor(Color.DKGRAY);


setContentView(R.layout.activity_map);

googleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id. map)).getMap();
googleMap.addPolygon(polygonOptions);
googleMap.addPolygon(polygonOption);


if (initMap())
{
Toast.makeText(this, "Ready to use", Toast.LENGTH_LONG).show();

locationClient = new LocationClient(this, this, this);
locationClient.connect();

}
}
else
{
Toast.makeText(this, "Ready not available", Toast.LENGTH_LONG).show();
}
}

public boolean serviceOk()
{
try
{
int isAvailable = GooglePlayServicesUtil.isGooglePlayServicesAvailab le(this);

if (isAvailable == ConnectionResult.SUCCESS)
{
return true;
}
else if (GooglePlayServicesUtil.isUserRecoverableError(isA vailable))
{
Dialog dialog = GooglePlayServicesUtil.getErrorDialog(isAvailable, this, GPS_ERRORDIALOG_REQUEST);
dialog.show();
}
else
{
Toast.makeText(this, "Cannot connect to Map", Toast.LENGTH_LONG).show();
}
}
catch (Exception ex)
{
Toast.makeText(this, ex.getMessage(), Toast.LENGTH_LONG).show();
}
return false;
}

private boolean initMap()
{
if (googleMap == null )
{
SupportMapFragment supportMapFragment =
(SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id. map);
googleMap = supportMapFragment.getMap();

if (googleMap != null)
{
googleMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter()
{

@Override
public View getInfoWindow(Marker arg0)
{
return null;
}

@Override
public View getInfoContents(Marker marker)
{
View v = getLayoutInflater().inflate(R.layout.info_window, null);
TextView tvLocality = (TextView) v.findViewById(R.id.tv_locality);
TextView tvLat = (TextView) v.findViewById(R.id.tv_lat);
TextView tvLng = (TextView) v.findViewById(R.id.tv_lng);
TextView tvSnippet = (TextView) v.findViewById(R.id.tv_snippet);

LatLng ll = marker.getPosition();

tvLocality.setText(marker.getTitle());
tvLat.setText("Latitude: " + ll.latitude);
tvLng.setText("Longitude: " + ll.longitude);
tvSnippet.setText(marker.getSnippet());

return v;
}
});
}

}
return (googleMap != null);
}

private void setMarker(String locality, String country, double lat, double lng)
{
if (marker != null)
{
marker.remove();
}

MarkerOptions markerOption = new MarkerOptions()
.title(locality)
.position(new LatLng(lat, lng))
.icon(BitmapDescriptorFactory.fromResource(R.drawa ble.ic_mapmarker));
if (country.length() > 0)
{
markerOption.snippet(country);
}
marker = googleMap.addMarker(markerOption);
}

private void gotoCurrentLocation()
{
Location currentLocation = locationClient.getLastLocation();
if (currentLocation == null)
{
Toast.makeText(this, "Current location is not available", Toast.LENGTH_LONG).show();
}
else
{
LatLng ll = new LatLng(currentLocation.getLatitude(), currentLocation.getLongitude());
CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(ll, Default_Zoom);
googleMap.animateCamera(cameraUpdate);

setMarker("Current Location", "",
currentLocation.getLatitude(),
currentLocation.getLongitude());
}
}

@Override
public void onConnected(Bundle bundle)
{
gotoCurrentLocation();
}

@Override
public void onDisconnected()
{

}

@Override
public void onConnectionFailed(ConnectionResult arg0)
{

}

@Override
protected void onStop() {
super.onStop();
MapStateManager mgr = new MapStateManager(this);
mgr.saveMapState(googleMap);
}

@Override
protected void onResume() {
super.onResume();
MapStateManager mgr = new MapStateManager(this);
CameraPosition position = mgr.getSavedCameraPosition();
if (position != null) {
CameraUpdate update = CameraUpdateFactory.newCameraPosition(position);
googleMap.moveCamera(update);
// This is part of the answer to the code challenge
googleMap.setMapType(mgr.getSavedMapType());
}

}

}

sara.nikzadeh
سه شنبه 10 شهریور 1394, 18:27 عصر
کسی نیست یه راهنمایی کنه؟؟؟؟

sara.nikzadeh
چهارشنبه 11 شهریور 1394, 15:13 عصر
کممممممکککککککککککککککککک ک!!!!!!!!!!

djtrex
چهارشنبه 11 شهریور 1394, 18:00 عصر
خودتون قبلا این سوال رو پرسیدید:

http://barnamenevis.org/showthread.php?494636-%D8%AA%D9%82%D8%B3%DB%8C%D9%85-%D8%B4%D9%87%D8%B1-%D8%AA%D9%87%D8%B1%D8%A7%D9%86-%D8%A8%D9%87-%D8%A7%D8%B4%DA%A9%D8%A7%D9%84-%D9%85%D8%AE%D8%AA%D9%84%D9%81-%D8%A8%D8%A7-%DA%AF%D9%88%DA%AF%D9%84-%D9%85%D9%BE&p=2212597&viewfull=1#post2212597

sara.nikzadeh
چهارشنبه 11 شهریور 1394, 18:42 عصر
خودتون قبلا این سوال رو پرسیدید:

http://barnamenevis.org/showthread.php?494636-%D8%AA%D9%82%D8%B3%DB%8C%D9%85-%D8%B4%D9%87%D8%B1-%D8%AA%D9%87%D8%B1%D8%A7%D9%86-%D8%A8%D9%87-%D8%A7%D8%B4%DA%A9%D8%A7%D9%84-%D9%85%D8%AE%D8%AA%D9%84%D9%81-%D8%A8%D8%A7-%DA%AF%D9%88%DA%AF%D9%84-%D9%85%D9%BE&p=2212597&viewfull=1#post2212597

دوست من هنوز درکش نکردم که چطوری کاربر داخل polygon میشه مارکر ها رو تغییر بدم. لطفا اگه اطلاعی دارین راهنمایی کنید. با تشکر

javdanmj
چهارشنبه 11 شهریور 1394, 21:19 عصر
سلام
نمیدونم مربوط هست یا نه
دیدم google map android api قابلیتی داره که وقتی یوزر وارد محدوده ای بشه رو متوجه بشه - ولی خودم باش کار نکردم
https://developer.android.com/training/location/geofencing.html
حالا اگه ربطی به کار شما داره هم خودتون بخونین هم بگین من بخونم با کمک هم ببینیم چی از توش در میاد :)

sara.nikzadeh
شنبه 14 شهریور 1394, 09:41 صبح
تو لینکی که دوست خوبم آقای javdanmj (http://barnamenevis.org/member.php?344479-javdanmj) گذاشته بودن یه چیزی پیدا کردم بنام INITIAL_TRIGGER_ENTER . فکر کنم کاری که من میخوام انجام بدم رو برام توضیح میده.
حالا مشکلم تو پیاده سازی این هست. اگه براتون امکان داره یه نگاهی بهش بندازین و راهنمایی کنین
مشکلم هم اینه که میخوام تا کاربر وارد polygon میشه مارکر مخصوص خود polygon رو نمایش بده.
که باز همین دوست عزیز لطف نمودن و راهنمایی کردن که از

Public class GeofenceTransitionsIntentService extends IntentService

به این صورت استفاده کنم که اگه :

geofenceTransition == Geofence.GEOFENCE_TRANSITION_ENTER

بود به MainActivity با EventBus مشخصات این geofenceTransition رو بفرستید و اکتیویتی طبق اون تصمیم بگیره چه مارکری بسازه.
حالا مشکلم اینه که اصلا درک درستی ازشون ندارم، اگه کسی باهاشون کار کرده راهنمایی کنه
ممنون از راهنمایی هاتون

javdanmj
شنبه 14 شهریور 1394, 19:40 عصر
اینها تصورات من از کاریه که میخواید بکنید شاید اشتباه و شاید راه آسون تر هم داشته باشه:متفکر:

فک کنم بد توضیح دادم :/

eventbus یه کتابخونست برای ارتباط دوتا اکتیویتی یا اکتیویتی و فرگمنت یا ...
مثلا حالتی رو در نظر بگیرید که شما فایلی رو داخل سرویس یا thread دارین دانلود میکنید میخواید وقتی تموم شد تو اکتیویتی یه پیغام بیاد ، شما اگه باشید راه حلتون چیه ؟ حتما راه حل داره ولی راه آسون ترش استفاده از کتابخونه ای هست که اینکارو برامون انجام بده
اینجا هم شما برای گوگل پلی درخواست میدین که اگه کاربر وارد اون محوطه شد به یه intentService خبر بده ، ینی وقتی کاربر وارد شد دستورات onHandle اون intent service اجرا میشه ، فرض میکنیم کاربر وارد شد ولی مستقیم از اینتنت سرویس نمیتونیم UI برنامه رو تغییر بدیم ،برا همین باید به MainActivity خبر بدیم که اون مارکر رو نشون بده ، EventBus این کار رو راحت انجام میده ، ینی از intent service یه پیام مثلا 3 رو میفرستیم به اکتیویتی و و به اکتیویتی میگیم اگه سه اومد مارکر 3 رو نشون بده :ناراحت::ناراحت:

sara.nikzadeh
سه شنبه 17 شهریور 1394, 17:10 عصر
اینها تصورات من از کاریه که میخواید بکنید شاید اشتباه و شاید راه آسون تر هم داشته باشه:متفکر:

فک کنم بد توضیح دادم :/

eventbus یه کتابخونست برای ارتباط دوتا اکتیویتی یا اکتیویتی و فرگمنت یا ...
مثلا حالتی رو در نظر بگیرید که شما فایلی رو داخل سرویس یا thread دارین دانلود میکنید میخواید وقتی تموم شد تو اکتیویتی یه پیغام بیاد ، شما اگه باشید راه حلتون چیه ؟ حتما راه حل داره ولی راه آسون ترش استفاده از کتابخونه ای هست که اینکارو برامون انجام بده
اینجا هم شما برای گوگل پلی درخواست میدین که اگه کاربر وارد اون محوطه شد به یه intentService خبر بده ، ینی وقتی کاربر وارد شد دستورات onHandle اون intent service اجرا میشه ، فرض میکنیم کاربر وارد شد ولی مستقیم از اینتنت سرویس نمیتونیم UI برنامه رو تغییر بدیم ،برا همین باید به MainActivity خبر بدیم که اون مارکر رو نشون بده ، EventBus این کار رو راحت انجام میده ، ینی از intent service یه پیام مثلا 3 رو میفرستیم به اکتیویتی و و به اکتیویتی میگیم اگه سه اومد مارکر 3 رو نشون بده :ناراحت::ناراحت:

دوست من ممنون از راهنمایی های شما.
اما من نصف این چیزایی که گفتین رو نمیفهمم. تازه کارم تو اندروید
اگه مقدوره براتون لینکی در همین رابطه یا آموزش یا سمپلی برام بزاربین