如何在 osmdroid 上搜索位置名称以获取纬度经度
how to search location name on osmdroid to get latitude longitude
如何使用open street map osmdroid通过搜索位置名称获取经纬度。
我的期望是,它看起来像实现 google 地图位置自动完成,但我不知道如何在 osmdroid 中制作自动完成位置。我没有找到任何使用 osmdroid
按位置名称搜索位置的教程
所以我找到了这种用 osmdroid 搜索位置的方法,但这不是我所期望的。我正在使用地理编码器在此处搜索位置参考
https://developer.android.com/reference/android/location/Geocoder
第一步我们要做一个搜索框Edittext来搜索位置,逻辑是这样的
etSearch.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
etSearch.clearFocus()
val query = etSearch.text.toString()
if (query != "") {
getLocationName(query)
} else {
Toast.makeText(
requireContext(),
getString(R.string.mohon_isi_terlebih_dahulu),
Toast.LENGTH_SHORT
).show()
}
}
true
}
从搜索框中获取查询文本后,我们需要调用函数 getLocationName(String)
,该函数如下所示
fun getLocationName(locationName: String){
try {
val geocoder = Geocoder(requireContext(), Locale.getDefault())
var geoResults: List<Address> = geocoder.getFromLocationName("$locationName", 1)
if (geoResults.isNotEmpty()) {
val addr = geoResults[0]
val location = GeoPoint(addr.latitude, addr.longitude)
moveCameraMap(location)
}else{
Toast.makeText(requireContext(),"Location Not Found",Toast.LENGTH_LONG)
}
} catch (e: java.lang.Exception) {
print(e.message)
}
}
在函数中我们可以看到地理编码器调用 getFromLocationName("location name", max result)
,我们得到了纬度和经度。
这是我的解决方案,我希望有人能改进它。感谢您的帮助
如何使用open street map osmdroid通过搜索位置名称获取经纬度。
我的期望是,它看起来像实现 google 地图位置自动完成,但我不知道如何在 osmdroid 中制作自动完成位置。我没有找到任何使用 osmdroid
按位置名称搜索位置的教程所以我找到了这种用 osmdroid 搜索位置的方法,但这不是我所期望的。我正在使用地理编码器在此处搜索位置参考
https://developer.android.com/reference/android/location/Geocoder
第一步我们要做一个搜索框Edittext来搜索位置,逻辑是这样的
etSearch.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
etSearch.clearFocus()
val query = etSearch.text.toString()
if (query != "") {
getLocationName(query)
} else {
Toast.makeText(
requireContext(),
getString(R.string.mohon_isi_terlebih_dahulu),
Toast.LENGTH_SHORT
).show()
}
}
true
}
从搜索框中获取查询文本后,我们需要调用函数 getLocationName(String)
,该函数如下所示
fun getLocationName(locationName: String){
try {
val geocoder = Geocoder(requireContext(), Locale.getDefault())
var geoResults: List<Address> = geocoder.getFromLocationName("$locationName", 1)
if (geoResults.isNotEmpty()) {
val addr = geoResults[0]
val location = GeoPoint(addr.latitude, addr.longitude)
moveCameraMap(location)
}else{
Toast.makeText(requireContext(),"Location Not Found",Toast.LENGTH_LONG)
}
} catch (e: java.lang.Exception) {
print(e.message)
}
}
在函数中我们可以看到地理编码器调用 getFromLocationName("location name", max result)
,我们得到了纬度和经度。
这是我的解决方案,我希望有人能改进它。感谢您的帮助