- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对谷歌地图有疑问。我尝试从我当前的位置和标记的位置添加 poliline。这是代码:
public class MapsFragment extends Fragment implements GoogleMap.OnMarkerClickListener, LocationListener {
static final LatLng CEK = new LatLng(50.293734, 18.680679);
static final LatLng SPIRALA = new LatLng(50.285402, 18.677715);
static final LatLng SPIRALA2 = new LatLng(50.285283, 18.678014);
static final LatLng ZIEMOWIT_PIAST = new LatLng(50.287742, 18.675693);
static final LatLng NOWA_HALA = new LatLng(50.289633, 18.679960);
static final LatLng STOLOWKA = new LatLng(50.288337, 18.674267);
static final LatLng RYNEK = new LatLng(50.294028, 18.665659);
static final LatLng LAKA_IGROWA = new LatLng(50.288844, 18.679562);
private static GoogleMap map;
private ArrayList<Marker> markerPoints;
private ArrayList<LatLng> mMarkerPoints;
private HashMap<String, Event> haspMap;
private Event cekEvent, spiralaEvent, spirala2Event, ziemowitEvent, nowaHalaEvent, stolowkaEvent, rynekEvent, lakaEvent;
private double mLatitude=0;
private double mLongitude=0;
private Location currentBestLocation = null;
private LocationManager locationManager;
private LatLng currentPos;
private Location location;
private Polyline polyline;
private static View v;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (v != null) {
ViewGroup parent = (ViewGroup) v.getParent();
if (parent != null)
parent.removeView(v);
}
try {
v = inflater.inflate(R.layout.fragment_map, container, false);
} catch (InflateException e) {
e.printStackTrace();
}
haspMap = new HashMap <String, Event>();
mMarkerPoints = new ArrayList<>();
locationManager = (LocationManager) getActivity().getSystemService(getActivity().LOCATION_SERVICE);
setEventsData();
try {
initializeMap();
} catch (Exception e) {
e.printStackTrace();
}
return v;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ButterKnife.inject(this, view);
try {
initializeMap();
} catch (Exception e) {
e.printStackTrace();
}
zoomMapOnMarkers();
}
private void initializeMap() {
if (map == null) {
map = ((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map))
.getMap();
map.setOnMarkerClickListener(this);
setPointsList();
}
}
private void setPointsList(){
markerPoints = new ArrayList<>();
markerPoints.add(map.addMarker(new MarkerOptions()
.position(CEK)));
haspMap.put(markerPoints.get(markerPoints.size() - 1).getId(), cekEvent);
markerPoints.add(map.addMarker(new MarkerOptions()
.position(SPIRALA)));
haspMap.put(markerPoints.get(markerPoints.size() - 1).getId(), spiralaEvent);
markerPoints.add(map.addMarker(new MarkerOptions()
.position(SPIRALA2)));
haspMap.put(markerPoints.get(markerPoints.size() - 1).getId(), spirala2Event);
markerPoints.add(map.addMarker(new MarkerOptions()
.position(ZIEMOWIT_PIAST)));
haspMap.put(markerPoints.get(markerPoints.size() - 1).getId(), ziemowitEvent);
markerPoints.add(map.addMarker(new MarkerOptions()
.position(NOWA_HALA)));
haspMap.put(markerPoints.get(markerPoints.size() - 1).getId(), nowaHalaEvent);
markerPoints.add(map.addMarker(new MarkerOptions()
.position(STOLOWKA)));
haspMap.put(markerPoints.get(markerPoints.size() - 1).getId(), stolowkaEvent);
markerPoints.add(map.addMarker(new MarkerOptions()
.position(RYNEK)));
haspMap.put(markerPoints.get(markerPoints.size() - 1).getId(), rynekEvent);
markerPoints.add(map.addMarker(new MarkerOptions()
.position(LAKA_IGROWA)));
haspMap.put(markerPoints.get(markerPoints.size() - 1).getId(), lakaEvent);
}
private void setEventsData(){
cekEvent = new Event();
cekEvent.setTitle("Kabareton Igrowy w Centrum Edukacyjno - Kongresowe");
cekEvent.setDate("Poniedziałek, 11 maja, 18:00");
cekEvent.setPlace("CEK, ul. Konarskiego 18B");
spiralaEvent = new Event();
spiralaEvent.setTitle("Występ ATR Remont w CKS Mrowisko, a następnie Jam Session w KS Spirala");
spiralaEvent.setDate("Poniedziałek, 11 maja, 19:00");
spiralaEvent.setPlace("Spirala, ul. Pszczyńska 85");
spirala2Event = new Event();
spirala2Event.setTitle("Gra Miejska");
spirala2Event.setDate("Wtorek, 12 maja, 17:00");
spirala2Event.setPlace("Spirala, ul. Pszczyńska 85");
ziemowitEvent = new Event();
ziemowitEvent.setTitle("Pokaz filmowy między Piastem, a Ziemowitem");
ziemowitEvent.setDate("Wtorek, 12 maja, 19:00");
ziemowitEvent.setPlace("Między Ziemowitem a Piastem, ul. Łużycka 30-32");
nowaHalaEvent = new Event();
nowaHalaEvent.setTitle("Dzień Sportu");
nowaHalaEvent.setDate("Środa, 13 maja, 8:30");
nowaHalaEvent.setPlace("Nowa Hala, ul. Kaszubska 28");
stolowkaEvent = new Event();
stolowkaEvent.setTitle("Wieczór z grami planszowymi na Stołówce \"Na Łużyckiej\"");
stolowkaEvent.setDate("Środa, 13 maja, 17:30");
stolowkaEvent.setPlace("Stołówka na Łużyckiej, ul. Łużycka 24");
rynekEvent = new Event();
rynekEvent.setTitle("Przekazanie klucza na gliwickim rynku, a następnie korowód!");
rynekEvent.setDate("Czwartek, 14 maja, 16:00");
rynekEvent.setPlace("Rynek");
lakaEvent = new Event();
lakaEvent.setTitle("W czwartek wystąpią: Funk Da System, Koniec Świata, Farben Lehre, Acid Drinkers!\n" +
"A w piątek: Othalan, Prime, Małpa, Jamal, T.Love!\n");
lakaEvent.setDate("Czwrartek i piątek, 14-15 maja");
lakaEvent.setPlace("Łąka igrowa");
}
@Override
public boolean onMarkerClick(final Marker marker) {
for(Marker m : markerPoints){
if (marker.getId().equals(m.getId())){
showDialogInfo(m);
}
}
return false;
}
private void showDialogMore(Marker m){
LayoutInflater inflater = getLayoutInflater(getArguments());
View dialogLayout = inflater.inflate(R.layout.dialog_more_info, null);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
TextView title = (TextView) dialogLayout.findViewById(R.id.dialogMoreTitle);
TextView text = (TextView) dialogLayout.findViewById(R.id.dialogMoreText);
Iterator iterator = haspMap.keySet().iterator();
while(iterator.hasNext()) {
String key=(String)iterator.next();
Event ev = (Event)haspMap.get(key);
if(m.getId().equals(key)) {
if (ev.getTitle().equals(cekEvent.getTitle())) {
title.setText(getString(R.string.event_monday_title));
text.setText(getString(R.string.event_monday_text));
} else if (ev.getTitle().equals(spiralaEvent.getTitle())) {
title.setText(getString(R.string.event_monday_title));
text.setText(getString(R.string.event_monday_text));
} else if (ev.getTitle().equals(spirala2Event.getTitle())) {
title.setText(getString(R.string.event_tuesday_title));
text.setText(getString(R.string.event_tuesday_text));
} else if (ev.getTitle().equals(ziemowitEvent.getTitle())) {
title.setText(getString(R.string.event_tuesday_title));
text.setText(getString(R.string.event_tuesday_text));
} else if (ev.getTitle().equals(nowaHalaEvent.getTitle())) {
title.setText(getString(R.string.event_wednesday_title));
text.setText(getString(R.string.event_wednesday_text));
} else if (ev.getTitle().equals(stolowkaEvent.getTitle())) {
title.setText(getString(R.string.event_wednesday_title));
text.setText(getString(R.string.event_wednesday_text));
} else if (ev.getTitle().equals(rynekEvent.getTitle())) {
title.setText(getString(R.string.event_thursday_title));
text.setText(getString(R.string.event_thursday_text));
} else if (ev.getTitle().equals(lakaEvent.getTitle())) {
title.setText(getString(R.string.event_thursday_title) + "\n" + getString(R.string.event_friday_title));
text.setText(getString(R.string.event_thursday_text) + "\n" + getString(R.string.event_friday_text));
}
}
}
builder.setView(dialogLayout);
builder.show();
}
private void showDialogInfo(final Marker m){
LayoutInflater inflater = getLayoutInflater(getArguments());
final View dialogLayout = inflater.inflate(R.layout.dialog_marker, null);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
RelativeLayout layoutMore = (RelativeLayout) dialogLayout.findViewById(R.id.layoutMore);
RelativeLayout layoutTrip = (RelativeLayout) dialogLayout.findViewById(R.id.layoutTrip);
TextView textTitle = (TextView) dialogLayout.findViewById(R.id.textTitle);
TextView textDate = (TextView) dialogLayout.findViewById(R.id.textDate);
TextView textPlace = (TextView) dialogLayout.findViewById(R.id.textPlace);
builder.setView(dialogLayout);
final AlertDialog dialog = builder.create();
Iterator iterator = haspMap.keySet().iterator();
while(iterator.hasNext()) {
String key=(String)iterator.next();
Event ev = (Event)haspMap.get(key);
if(m.getId().equals(key)) {
textTitle.setText(ev.getTitle());
textDate.setText(ev.getDate());
textPlace.setText(ev.getPlace());
}
}
layoutMore.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showDialogMore(m);
}
});
layoutTrip.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (location != null) {
if(polyline != null)
polyline.remove();
mMarkerPoints.clear();
mMarkerPoints.add(currentPos);
mMarkerPoints.add(m.getPosition());
LatLng origin = mMarkerPoints.get(0);
LatLng dest = mMarkerPoints.get(1);
String url = getDirectionsUrl(origin, dest);
DownloadTask downloadTask = new DownloadTask();
downloadTask.execute(url);
dialog.dismiss();
} else {
drawRoute();
Toast.makeText(getActivity(), getString(R.string.toast_no_location), Toast.LENGTH_SHORT).show();
}
}
});
dialog.show();
}
private void zoomMapOnMarkers(){
LatLngBounds.Builder builder = new LatLngBounds.Builder();
for (Marker marker : markerPoints) {
builder.include(marker.getPosition());
}
final LatLngBounds bounds = builder.build();
map.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
@Override
public void onMapLoaded() {
map.animateCamera(CameraUpdateFactory.newLatLngBounds(bounds, 45));
map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
}
});
if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
drawRoute();
}else{
showGPSDisabledAlertToUser();
}
}
private void showGPSDisabledAlertToUser(){
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());
alertDialogBuilder.setMessage(getString(R.string.dialog_GPS))
.setCancelable(false)
.setPositiveButton("OK",
new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int id){
Intent callGPSSettingIntent = new Intent(
android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(callGPSSettingIntent);
}
});
alertDialogBuilder.setNegativeButton("Cancel",
new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int id){
dialog.cancel();
}
});
AlertDialog alert = alertDialogBuilder.create();
alert.show();
}
private void drawRoute(){
map.setMyLocationEnabled(true);
Criteria criteria = new Criteria();
String provider = locationManager.getBestProvider(criteria, true);
location = locationManager.getLastKnownLocation(provider);
if(location!=null){
onLocationChanged(location);
}
locationManager.requestLocationUpdates(provider, 20000, 0, this);
}
@Override
public void onResume() {
super.onResume();
initializeMap();
}
private void drawMarker(LatLng point){
mMarkerPoints.add(point);
MarkerOptions options = new MarkerOptions();
options.position(point);
if(mMarkerPoints.size()==1){
options.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
}else if(mMarkerPoints.size()==2){
options.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED));
}
// Add new marker to the Google Map Android API V2
map.addMarker(options);
}
@Override
public void onLocationChanged(Location locatione) {
currentBestLocation = locatione;
Criteria criteria = new Criteria();
String provider = locationManager.getBestProvider(criteria, true);
location = locationManager.getLastKnownLocation(provider);
currentPos = new LatLng(currentBestLocation.getLatitude(), currentBestLocation.getLongitude());
mMarkerPoints.add(currentPos);
if(mMarkerPoints.size() < 2){
mLatitude = locatione.getLatitude();
mLongitude = locatione.getLongitude();
LatLng point = new LatLng(mLatitude, mLongitude);
map.moveCamera(CameraUpdateFactory.newLatLng(point));
map.animateCamera(CameraUpdateFactory.zoomTo(12));
drawMarker(point);
}
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
private String getDirectionsUrl(LatLng origin,LatLng dest){
String str_origin = "origin="+origin.latitude+","+origin.longitude;
String str_dest = "destination="+dest.latitude+","+dest.longitude;
String sensor = "sensor=false";
String parameters = str_origin+"&"+str_dest+"&"+sensor;
String output = "json";
String url = "https://maps.googleapis.com/maps/api/directions/"+output+"?"+parameters;
return url;
}
private String downloadUrl(String strUrl) throws IOException {
String data = "";
InputStream iStream = null;
HttpURLConnection urlConnection = null;
try{
URL url = new URL(strUrl);
urlConnection = (HttpURLConnection) url.openConnection();
//urlConnection.connect();
urlConnection.setReadTimeout(10000 /* milliseconds */);
urlConnection.setConnectTimeout(15000 /* milliseconds */);
urlConnection.setRequestMethod("GET");
urlConnection.setDoInput(true);
// Starts the query
urlConnection.connect();
iStream = urlConnection.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(iStream));
StringBuffer sb = new StringBuffer();
String line = "";
while( ( line = br.readLine()) != null){
sb.append(line);
}
data = sb.toString();
br.close();
}catch(Exception e){
e.printStackTrace();
}finally{
iStream.close();
urlConnection.disconnect();
}
return data;
}
/** A class to download data from Google Directions URL */
private class DownloadTask extends AsyncTask<String, Void, String> {
// Downloading data in non-ui thread
@Override
protected String doInBackground(String... url) {
// For storing data from web service
String data = "";
try{
// Fetching the data from web service
data = downloadUrl(url[0]);
}catch(Exception e){
Log.d("Background Task",e.toString());
}
return data;
}
// Executes in UI thread, after the execution of
// doInBackground()
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
ParserTask parserTask = new ParserTask();
// Invokes the thread for parsing the JSON data
parserTask.execute(result);
}
}
/** A class to parse the Google Directions in JSON format */
private class ParserTask extends AsyncTask<String, Integer, List<List<HashMap<String,String>>> >{
// Parsing the data in non-ui thread
@Override
protected List<List<HashMap<String, String>>> doInBackground(String... jsonData) {
JSONObject jObject;
List<List<HashMap<String, String>>> routes = null;
try{
jObject = new JSONObject(jsonData[0]);
DirectionsJSONParser parser = new DirectionsJSONParser();
// Starts parsing data
routes = parser.parse(jObject);
}catch(Exception e){
e.printStackTrace();
}
return routes;
}
// Executes in UI thread, after the parsing process
@Override
protected void onPostExecute(List<List<HashMap<String, String>>> result) {
ArrayList<LatLng> points = null;
PolylineOptions lineOptions = null;
// Traversing through all the routes
for(int i=0;i<result.size();i++){
points = new ArrayList<LatLng>();
lineOptions = new PolylineOptions();
// Fetching i-th route
List<HashMap<String, String>> path = result.get(i);
// Fetching all the points in i-th route
for(int j=0;j<path.size();j++){
HashMap<String,String> point = path.get(j);
double lat = Double.parseDouble(point.get("lat"));
double lng = Double.parseDouble(point.get("lng"));
LatLng position = new LatLng(lat, lng);
points.add(position);
}
// Adding all the points in the route to LineOptions
lineOptions.addAll(points);
lineOptions.width(6);
lineOptions.color(Color.RED);
}
// Drawing polyline in the Google Map for the i-th route
//map.addPolyline(lineOptions);
polyline = map.addPolyline(lineOptions);
}
}
@Override
public void onDestroyView() {
super.onDestroyView();
Fragment fragment = (getFragmentManager().findFragmentById(R.id.map));
if (fragment != null){
getActivity().getSupportFragmentManager().beginTransaction()
.remove(fragment)
.commit();
}
}
}
我有来自标记的当前位置和位置,当单击以绘制折线时,我得到无法解析主机“maps.googleapis.com”:没有与主机名关联的地址。和应用程序崩溃。重新开始时一切正常,折线添加到 map 中。知道为什么吗?
最佳答案
我使用以下方法解决我的问题:
urlConnection.setReadTimeout(15000 /* milliseconds */);
urlConnection.setConnectTimeout(15000 /* milliseconds */);
urlConnection.setDoInput(true);
关于android - Google map 和无法解析主机 maps.googleapis.com,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30018341/
我正在尝试从一个 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 m
我是 Haskell 的新手,我认为函数 map map和 map.map在 Haskell 中是一样的。 我的终端给了我两种不同的类型, (map.map) :: (a -> b) -> [[a]
我的目标是创建一个 map 的 map ,这样我就可以通过它的键检索外部 map 的信息,然后通过它们的键访问它的“内部” map 。 但是,当我得到每个内部映射时,我最初创建的映射变成了一个对象,我
如何使用 Java8 编写以下代码? for (Entry> entry : data.entrySet()) { Map value = entry.getValue(); if (valu
我有覆盖整个南非的图片。它们为Tiff格式,并已将坐标嵌入其中。我正在尝试拍摄这些图像(大约20张图像),并将它们用作我的iPhone应用程序中的地图叠加层。我的问题在于(准确地)将地图切成图块。 我
所以我有 2 std::map s >一个是“旧的”,一个是“新的”,我想知道哪些文件被删除了,这样就能够遍历差异并对 shared_ptr 做一些事情。这样的事情可能吗?如何做到? 最佳答案 虽然
是否可以将当前查看的 google.maps.Map 转换为静态图像链接,以便我可以获取图像并将其嵌入到 PDF 中? 我在 map 上添加了一些带有自定义图标的标记,所以我不确定这是否真的可行。 如
你能帮我吗 Java Streams ? 从标题可以看出我需要合并List>>进入Map> . 列表表示为List>>看起来像: [ { "USER_1":{
对于 idAndTags 的第二个条目,内部映射被打乱,但第一个条目则不然 第一次接近! for (Map.Entry> entryOne : idAndTags.entrySet()) {
我将从我的代码开始,因为它应该更容易理解我想要做什么: @function get-color($color, $lightness) { @return map-get(map-get($col
我过去曾在许多网站上使用过 Google map ,但遇到了以前从未遇到过的问题。 map 窗口正在显示,但它只显示左上角的 map 片段,以及之后的任何内容(即使我在周围导航时),右侧也不会加载任何
众所周知,这些 map ,无论是常规街道 map 还是卫星 map ,在中国的特定地区都无法正确排列。那么哪个 map 排列正确,是卫星 map 还是默认街道 map ?一些网站表明卫星 map 是正
在拖尾事件之后,我面临着获取此处 map 中的 map 边界的问题。我需要新的经纬度来在新更改的视口(viewport)中获取一些项目/点。我只是想在拖动结束时获得谷歌地图map.getBounds(
我想做的是通过 ajax API 显示以英国邮政编码为中心的小型 bing 生成 map 。我相信这是可能的;我在 Bing map 文档中找不到如何将英国邮政编码转换为可以插入 map Ajax 控
我有一个 List我想转换成的 e Map>其中外部字符串应为“Name”,内部字符串应为“Domain”。 Name Id Domain e(0) - Emp1, 1, Insuran
我的第 2 部分:https://stackoverflow.com/questions/21780627/c-map-of-maps-typedef-doubts-queries 然后我继续创建 I
是否可以在 1 行中使用 Java8 编写以下所有 null 和空字符串检查? Map> data = new HashMap<>(holdings.rowMap()); Set>> entrySet
我正在审查一个项目的旧代码,并使用 Map 的 Map 的 Map 获得了如下数据结构(3 层 map ): // data structure Map>>> tagTree
这可能是一种不好的做法,但我还没有找到更好的解决方案来解决我的问题。所以我有这张 map // Map>> private Map>> properties; 我想初始化它,这样我就不会得到 Null
我们在 JDK 1.7 中使用 HashMap,我在使用 SonarQube 进行代码审查时遇到了一些问题。 请考虑以下示例: public class SerializationTest imple
我是一名优秀的程序员,十分优秀!